2015-10-13 187 views
0

我试图将类型传递给方法,并让它实例化所述类型的对象。我有很多重复的代码类似于:在作为参数传入的类型中实例化对象

foreach (Link link in links) 
{ 
    Object obj = new Object(link); 
    list.Add("Description" + obj.prop.ToString()); 
} 

随着众多不同的类/对象。

我设想:

private void populateList(List<Link> links, Type type, List<val> list, string desc) 
{ 
    foreach (Link link in links) 
    { 
     //Instantiate Object from type parameter here? 
     list.Add(desc + obj.prop.ToString()); 
    } 
} 

我尝试使用泛型和思考来解决问题:

Type[] typeArgs = {typeof(Link)}; 
Type constructed = type.MakeGenericType(typeArgs); 
object o = Activator.CreateInstance(constructed); 

但我不太清楚下一步去哪里因为我不能使用o或构建来做我需要的。

我是一个完整的初学者与反射和泛型,所以我甚至不知道如果我问的是可能的。我很感激任何关于下一步行动或任何潜在解决方案的建议。

+2

'prop'是什么? –

+1

哪个是泛型?链接? –

+0

@Dave Zych从文本框/下拉列表中拉取文本。一旦我遍历了所有的对象,我使用所产生的道具列表填充报告。 – mike

回答

1

工作的反思为此,

public static T GenerateNewInstance<T>(T obj) where T : class 
{ 
    Type type = typeof (T); 
    object instance = Activator.CreateInstance(type); 
    return instance as T; 
} 

我觉得你有与被访问对象的属性什么麻烦(丙?)编译器不知道你用的什么地方努力特定对象类型它被当作一个对象来投射。

你可以使用类似的,使这项工作运行时间:

obj.GetType().GetRuntimeProperty("PropertyName").GetValue(obj); 

但最终它的铸造对象为特定类的问题:

class obj = (class)obj; 
list.Add(obj.property.ToString()); 

编辑:我可能不明白你的问题正确。 它也好像你想通过不同类型的。原始类是否具有相同的属性,或者只是想将给定对象的所有属性添加到列表中?

如果它们具有相同的属性,请考虑创建一个与这些属性的接口并使您的类实现它,这样您就可以创建对象的新实例并将其作为接口进行转换,从而获得它们共享的属性。

+0

不,对不起,原来的类都有不同的属性。我应该在这个问题中提到,每个类型基本上都是一个输入表单,并且这些属性字段是表单中的输入字段,例如文本字段,下拉框等。 – mike

相关问题