如何使用反射动态创建通用C#对象?[重复]

在C#中,我有以下对象:

public class Item

{ }

public class Task<T>

{ }

public class TaskA<T> : Task<T>

{ }

public class TaskB<T> : Task<T>

{ }

我想使用C#反射( )动态创建TaskA或TaskB 。但是我事先不知道类型,所以我需要基于诸如“

namespace.TaskA”或“ namespace.TaskAB”之类的字符串动态创建TaskA。

回答:

查看本文和这个简单示例。快速将其翻译成您的班级…

var d1 = typeof(Task<>);

Type[] typeArgs = { typeof(Item) };

var makeme = d1.MakeGenericType(typeArgs);

object o = Activator.CreateInstance(makeme);

根据您的修改:对于这种情况,您可以执行此操作…

var d1 = Type.GetType("GenericTest.TaskA`1"); // GenericTest was my namespace, add yours

Type[] typeArgs = { typeof(Item) };

var makeme = d1.MakeGenericType(typeArgs);

object o = Activator.CreateInstance(makeme);

要查看通用类的名称是backtick1的来源,请参阅本文。

注意:如果泛型类接受多种类型,则在省略类型名称时必须包含逗号,例如:

Type type = typeof(IReadOnlyDictionary<,>);

以上是 如何使用反射动态创建通用C#对象?[重复] 的全部内容, 来源链接: utcz.com/qa/409108.html

回到顶部