是否可以根据运行时变量的类型创建类型为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(或bool转换为TesClass)
答案 0 :(得分:6)
是的,但你必须使用反射:
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>();
//...
}