我正在尝试将Type传递给方法并让它实例化所述Type的Object。我有很多重复的代码,类似于:
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());
}
}
我尝试使用Generics和Reflection来解决问题:
Type[] typeArgs = {typeof(Link)};
Type constructed = type.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(constructed);
但是我不太确定下一步该去哪里,因为我无法使用o或构造来做我需要的。
我是Reflection和Generics的初学者,所以我甚至不确定我所要求的是否可行。我很欣赏任何有关下一步或任何潜在解决方案的建议。
答案 0 :(得分:1)
反思适用于此目的
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());
编辑:我可能无法正确理解您的问题。 它似乎也想要传递不同类型的。原始类是否具有相同的属性,或者您只是想将给定对象的所有属性添加到列表中?
如果它们具有相同的属性,请考虑创建具有这些属性的接口并使您的类实现它,这样您就可以创建对象的新实例并将其转换为接口,从而获得它们共享的属性。