使用泛型创建新对象

时间:2013-07-12 23:29:04

标签: c# generics dictionary instantiation

对于同一主题的多个问题,我很抱歉,但我对仿制药不熟悉,虽然我觉得它很有吸引力,但事实证明它有点莫名其妙。

我需要使用泛型来检索词典中的条目,如果该条目不存在,我需要创建它。 Dictionary Key是一个String,Value是一个容器类 - 在本例中是PersonObject类型,但它可以是任何类型。由于dtb和p.s.w.g,我目前的工作效果很好,但我需要以某种方式创建新对象的通用。

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

使用Activator.CreateInstance

list.Add(property, Activator.CreateInstance(source.GetType());

答案 1 :(得分:-1)

谢谢大家的帮助。这让我找到了解决问题的方法,我找到了here

对于那些遇到同样问题的人,我修改了代码,使其显示为:

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()给了我字典的参数类型。