如何创建Dictionary来存储子类的类型
本文关键字:存储 子类 类型 Dictionary 何创建 创建 | 更新日期: 2023-09-27 18:19:27
如何创建一个字典来存储继承另一个类的类型作为值?
例如:
Dictionary<String, typeof(Parent)> dict = new Dictionary<string, typeof(Parent)>();
dict["key1"] = typeof(Child1);
dict["key2"] = typeof(Child2);
dict["key3"] = typeof(Child3);
public abstract class Parent { }
public class Child1 : Parent { }
public class Child2 : Parent { }
public class Child3 : Parent { }
我不想存储实例,而是存储类类型。
编辑:很抱歉我对我到底想做什么解释不正确。我正在寻找一种方法来存储类型,并确保此类型继承父类型。我希望是类型安全的,并确保存储类型是Parent的子类型。目前,我想办法做到这一点的唯一方法就是创建我自己的IDictionary实现。但这并不是我想要的。我想做这个
Dictionary<string, typeof(Parent)> dict = ...
知道吗?
我认为你只想使用Dictionary<string, Type>
,然后当你添加一些你应该做的事情时;
dict.Add("key1", typeof(Child1));
编辑:正如Avi的回答中所指出的,如果您想在运行时添加Type,则可以在实例上使用GetType()
方法。如果您在编译时执行此操作,通常会在类上使用typeof
。
使用类型:
dict["key1"] = typeof(Child1);
或者如果你有一个例子:
dict["key1"] = instance.GetType();
要解决问题,您需要通过System.Reflection
检查您的类型是否继承自Parent
类。查看此答案以了解更多信息(链接)。
if (typeof(Parent).IsAssignableFrom(typeof(Child1)))
{
dict["key1"] = typeof(Child1);
}
或者这个(链接)
int n = 0;
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
foreach (Type type in types)
{
if (type.IsSubclassOf(typeof(Parent)))
{
dict["key" + n] = type;
n++;
}
}
编辑:
要提供替代解决方案。。。
var result = System.Reflection.Assembly.GetExecutingAssembly()
.GetTypes()
.Where(t => t.IsSubclassOf(typeof(Parent));
foreach(Type type in result)
{
dict["key" + n] = type;
n++;
}
我认为这个问题没有"直接"的解决办法。
var dict = new Dictionary<String, Type>;
dict["key1"] = typeof(Child1);