在作为参数传递的类型的方法中实例化对象

本文关键字:实例化 对象 方法 类型 参数传递 | 更新日期: 2023-09-27 18:17:33

我试图将类型传递给方法并使其实例化所述类型的对象。我有很多重复的代码,类似于:

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());
编辑:我可能没有正确理解你的问题。你似乎也想传递不同的类型。原始类是否具有相同的属性,或者您只是想将给定对象的所有属性添加到列表中?

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