2013-11-26 61 views
1

根据运行时变量的类型是否可以创建类型为T的类的实例?根据运行时变量的类型创建通用类

例如:

var myType = myVariable.GetType(); 
var myTestClass = new TestClass<myType>(); 

这将无法编译,但希望显示了我想要的目的。

有没有办法?

编辑

说阶级是这样的:

public class TestClass<T> 
{  
    public string StringValue 
    { 
     get 
     { 
      return this.TypeValue == null ? string.Empty : this.TypeValue.ToString(); 
     } 
    } 

    public T TypeValue { get; set; } 
} 

如果我不喜欢的东西:

var test1 = TestClass((dynamic)x); // x is an int

我就可以设置像test1.TypedValue = 10

如果我不喜欢的东西:

var test2 = TestClass((dynamic)y); // y is a bool

我就可以设置像test2.TypedValue = true

目前,我得到一个错误,说明

不能int类型隐式转换为识别TestClass(或布尔到TesClass)

回答

6

是的,但你必须使用reflectio N:

object myTestClass = Activator.CreateInstance(
    typeof(TestClass<>).MakeGenericType(myType)); 

如果您TestClass<T>实现非泛型接口或具有非一般的基类,它会更加有用:

ITestClass myTestClass = (ITestClass) Activator.CreateInstance(
    typeof(TestClass<>).MakeGenericType(myType)); 

您也可以用dynamic欺骗(这不为你的反射,以及缓存性能优化策略等):

Evil((dynamic)myVariable); 
... 
void Evil<T>(T val) 
{ 
    var myTestClass = new TestClass<T>(); 
    //... 
} 
+2

+1作弊.. evilishly – quetzalcoatl

+0

@quetzalcoatl其实,我也搞砸了电话;修正在编辑 –

+0

@davy如果'myVariable'是'int',那么什么是'myProp'?什么声明'myProp'?因为它显然不是'int'... –