1

对于同一个主题的多个问题如此接近,我感到很抱歉,但我是泛型的新手,虽然我觉得它很吸引人,但事实证明它也有点令人困惑。

我需要使用泛型来检索字典中的条目,如果该条目不存在,我需要创建它。Dictionary Key 是一个字符串,Value 是一个容器类——在本例中是 PersonObject 类型,但它可以是任何类型。多亏了 dtb 和 pswg,我目前的工作效果很好,但我需要以某种方式使新对象的创建成为通用的。

IDictionary list = source.GetType().GetProperty(dictionaryName).GetValue(source, null) as IDictionary;
if (!list.Contains(property))
    list.Add(property, new HobbyObject());

而不是new HobbyObject(),我想创建一个由我正在访问的 Dictionary 定义的类型的新对象。这甚至可以通过反射来完成,还是我只需要为所有可能传入的字典编写一个大的 Switch Case?

感谢您提供任何帮助。

4

2 回答 2

2

使用Activator.CreateInstance

list.Add(property, Activator.CreateInstance(source.GetType());
于 2013-07-12T23:31:46.613 回答
-1

谢谢大家的帮助。它让我在找到解决方案方面走了很长一段路,我在这里找到了。

对于那些有同样问题的人,我修改了代码,如下所示:

IDictionary list = source.GetType().GetProperty(dictionaryName).GetValue(source, null) as IDictionary;
if (!list.Contains(property))
{
    Type[] arguments = list.GetType().GetGenericArguments();
    list.Add(property, Activator.CreateInstance(arguments[1]));
}

GetGenericArguments() 给了我字典参数的类型。

于 2013-07-16T21:09:31.833 回答