繁体   English   中英

从Type传递为参数的方法中实例化对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM