我想在
的行中存储派生对象的字典(全部来自同一个基础)Dictionary<Type,BaseClass> Dict = new Dictionary<Type,BaseClass>()
{
{typeof(string), new Item1fromBaseClass()}
{typeof(bool), new Item2fromBaseClass()}
...
};
我不知道如何将这个结构传递给参数 - 构造函数必然看起来像Item1fromBaseClass = new Item1fromBaseClass(Type t, object o)
好消息是每个类的签名都是相同的。我已成功测试没有参数。这可能吗? dict的初始化程序是什么样的?
编辑以添加:
在另一个类中给出BaseClass
个对象i
,我需要能够
i = Dict[typeof(string)]; //Args?
//i is now an instance of Item1fromBaseClass(Type t,object o)
答案 0 :(得分:1)
我认为你正在寻找这个:
Dictionary<Type, Func<Type, object, BaseClass>> Dict = new Dictionary<Type, Func<Type, object, BaseClass>>()
{
{ typeof(string), (t, o) => new Item1fromBaseClass(t, o) },
{ typeof(bool), (t, o) => new Item2fromBaseClass(t, o) },
};
然后你可以写:
i = Dict[typeof(string)].Invoke(type, obj);
答案 1 :(得分:0)
我担心这个问题不是很清楚。但是,听起来您遇到的问题是您需要在稍后的某个时间点检索BaseClass
值,并且在此之前不知道构造函数的object o
参数。
如果是这样,那么您需要推迟构建BaseClass
对象,直到那时为止。毕竟,否则你怎么知道o
值是什么?
这看起来像这样:
Dictionary<Type, Func<object, BaseClass>> Dict = new Dictionary<Type, Func<object, BaseClass>>()
{
{typeof(string), o => new Item1fromBaseClass(typeof(string), o) },
{typeof(bool), o => new Item2fromBaseClass(typeof(bool), o) },
...
};
然后你可以像这样使用它:
// The object parameter for the constructor
object o = ...;
i = Dict[typeof(string)](o);
如果这不能解决您的问题,请改进问题,以便更清楚。提供一个好的Minimal, Complete, and Verifiable code example,清楚地显示您要做的事情。在精确术语中说明该代码现在所执行的操作,以及您希望它执行的操作。