c#泛型.<T>,以编程方式从读取字符串值中分配T?

vzw*_*ick 3 c# generics instantiation

我有两个类(即CustomerEmployee)和一个通用存储库GenericRepository<T> where T : class.

是否可以在从字符串中分配T的值时实例化新的GenericRepository实例?

像这样:

string x  = "Customer";
var repository = new GenericRepository<x>();
Run Code Online (Sandbox Code Playgroud)

(从而创建类型的存储库实例GenericRepository<Customer>)

asa*_*yer 11

是的,但这很尴尬.

string name = "MyNamespace.Customer";

Type targetType = Type.GetType(name);

Type genericType = typeof(GenericRepository<>).MakeGenericType( targetType );

object instance = Activator.CreateInstance(genericType);
Run Code Online (Sandbox Code Playgroud)

在linqpad中,instance.Dump();:

GenericRepository<Customer> 
UserQuery+GenericRepository`1[UserQuery+Customer] 
Run Code Online (Sandbox Code Playgroud)

编辑

您可以将CreateInstance结果分配给动态,而不必通过反射调用方法.

dynamic instance = Activator.CreateInstance(genericType);
instance.SomeInstanceMethod(someParameter);
Run Code Online (Sandbox Code Playgroud)