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

时间:2010-09-21 10:14:51

标签: c#

在方法中我有这样一个对象:

Activator.CreateInstance(Type.GetType(TargetObject))

我需要将此对象传递给接受泛型类型的另一个类:

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

如何将此对象用作T to Repository类?

2 个答案:

答案 0 :(得分:1)

你可以用反射做到这一点,例如:

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

但反思很快就会产生更多反思 - 因为你需要通过反思谈论repoType。但 可以最大限度地减少这种影响:

  • 非通用接口(最简单的方法)
  • 通过反射调用泛型方法一次通过常规静态通用代码完成所有额外工作

对于第一个,我可能有一个IRepository接口(非泛型),然后就是:

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

答案 1 :(得分:0)

那是不可能的。你已经在设计时定义了T.