如何将对象实例转换为泛型类型?

如何将对象实例转换为泛型类型?

问题描述:

在方法我有一个这样的对象:如何将对象实例转换为泛型类型?

Activator.CreateInstance(Type.GetType(TargetObject)) 

和我需要通过该对象的其他类接受通用类型:

public class Repository<T> where T : class 
{ 
} 

如何使用此对象为T到存储库类?

+0

刚刚用标记工具编辑你的问题 – 2010-09-21 10:16:42

+0

http://*.com/questions/266115/pass-an-instantiated-system-type-as-a-type-parameter-for-a-generic -class – sloth 2010-09-21 10:20:53

这是不可能的。您已在设计时定义T.

+0

对不起,但那是不正确的;您可以*在运行时定义'T'(因为.NET泛型是由运行时提供的,而不是编译器),但它不是微不足道的,应该仅限于必要的场景。 – 2010-09-21 10:20:06

+0

同意你的意见。但他想将创建的对象传递给不可能的类。 – gsharp 2010-09-21 12:36:21

你可以做到这一点与反思,例如:

Type repoType = typeof(Repository<>).MakeGenericType(yourType); 

但很快反射后裔反思 - 因为你那么需要通过反射来谈谈repoType。有是尽量减少这种影响的方式,虽然:

  • 非通用接口(最简单的方法)
  • 呼吁通过反射泛型方法一次是通过定期的静态通用代码完成了所有的其他工作

对于第一个,我可能有一个IRepository接口(非通用),那么它就是:

IRepository repo = (IRepository)Activator.CreateInstance(repoType); 
repo.SomeNonGenericMethods(args); // etc