C# 将运行时生成的类型(通过TypeBuilder)传递给GenericClass

C# 将运行时生成的类型(通过TypeBuilder)传递给GenericClass,c#,generics,.net-3.5,reflection.emit,C#,Generics,.net 3.5,Reflection.emit,我想将运行时生成的类型(通过TypeBuilder)传递给泛型类中的泛型方法。我不能将其作为对象传递,因为反射用于查找各种属性 据我所知,这是无法做到的,因为泛型是在编译时而不是运行时应用的 我知道我可以改变这样的方法 public T Read() { T data = new T() ... return data; } 像 public object Read(Type newType) { object data = Activator.Cre

我想将运行时生成的类型(通过TypeBuilder)传递给泛型类中的泛型方法。我不能将其作为对象传递,因为反射用于查找各种属性

据我所知,这是无法做到的,因为泛型是在编译时而不是运行时应用的

我知道我可以改变这样的方法

public T Read()
{
     T data = new T()
     ...
     return data;
}

public object Read(Type newType)
{
     object data =  Activator.CreateInstance(newType);  
     ...
     return data;
}
但是,当类型已知时,这显然失去了泛型的所有优点,因此我可能会以这两种方法结束,不幸的是,这意味着还要复制许多其他辅助函数

有没有更好的办法解决这个问题

这个特定的项目需要在3.5框架下工作,但是如果在3.5框架下不可能,但在4.0框架下,我不介意知道。

假设
Read()
类读取器的成员,其中t:new()
,您可以这样调用通用版本(可能使用另一个
GetMethod()重载)
如果您有多个方法的名称为该类型的
Read

假设
Read()
类读取器的成员,其中T:new()
,则可以这样调用泛型版本(如果该类型上有多个名为
Read
的方法,则可能使用另一个
GetMethod()
重载):

Type readerType = typeof(Reader<>).MakeGenericType(generatedType);
object result = readerType
                  .GetMethod("Read")
                  .Invoke(Activator.CreateInstance(readerType), new object[0]);
interface IWhatever { … }

interface IWhateverFactory
{
    IWhatever Create();
}