将参数传递给存储在词典

时间:2016-06-22 01:59:32

标签: c#

我想在

的行中存储派生对象的字典(全部来自同一个基础)
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)

2 个答案:

答案 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,清楚地显示您要做的事情。在精确术语中说明该代码现在所执行的操作,以及您希望它执行的操作。