我试图将类型传递给方法并使其实例化所述类型的对象。我有很多重复的代码,类似于:
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或construct来做我需要的事情。
我是反射和泛型的完全初学者,所以我甚至不确定我所问的是否可能。如果你能告诉我下一步该怎么做,或者有什么可能的解决办法,我将不胜感激。
反射可用于此目的
public static T GenerateNewInstance<T>(T obj) where T : class
{
Type type = typeof (T);
object instance = Activator.CreateInstance(type);
return instance as T;
}
我认为你遇到的麻烦是访问对象属性(prop?)编译器不知道你正在处理的具体对象类型,因为它被强制转换为对象。
你可以在运行时使用如下命令:
obj.GetType().GetRuntimeProperty("PropertyName").GetValue(obj);
但最终这是一个将对象强制转换为特定类的问题:
class obj = (class)obj;
list.Add(obj.property.ToString());
编辑:我可能没有正确理解你的问题。你似乎也想传递不同的类型。原始类是否具有相同的属性,或者您只是想将给定对象的所有属性添加到列表中?如果它们有相同的属性,考虑用这些属性创建一个接口,并让你的类实现它,这样你就可以创建一个对象的新实例,并将其转换为接口,从而获得它们共享的属性。