[英]Instantiating Object in a method from Type passed as parameter
我试图将类型传递给方法,并使其实例化所述类型的对象。 我有很多重复的代码,类似于:
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或构造函数来执行所需的操作。
我是反射和泛型的完全入门者,所以我甚至不确定我要问的内容是否可行。 我将对下一步的建议或任何可能的解决方案表示感谢。
反射为此目的而工作
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());
编辑:我可能无法正确理解您的问题。 似乎您也想传递不同的类型。 原始类是否具有相同的属性,还是只想将给定对象的所有属性添加到列表中?
如果它们具有相同的属性,请考虑使用这些属性创建一个接口并让您的类实现该接口,这样您就可以创建对象的新实例并将其强制转换为接口,从而获得它们共享的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.