是否可以T根据运行时变量的类型创建类的实例?
例如:
var myType = myVariable.GetType();
var myTestClass = new TestClass<myType>();
Run Code Online (Sandbox Code Playgroud)
这不会编译,但希望显示我想要实现的目标.
有办法吗?
编辑
说这个类是这样的:
public class TestClass<T>
{
public string StringValue
{
get
{
return this.TypeValue == null ? string.Empty : this.TypeValue.ToString();
}
}
public T TypeValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我做了类似的事情:
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)
是的,但你必须使用反射:
object myTestClass = Activator.CreateInstance(
typeof(TestClass<>).MakeGenericType(myType));
Run Code Online (Sandbox Code Playgroud)
如果您TestClass<T>实现非泛型接口或具有非泛型基类,则它将更有用:
ITestClass myTestClass = (ITestClass) Activator.CreateInstance(
typeof(TestClass<>).MakeGenericType(myType));
Run Code Online (Sandbox Code Playgroud)
您也可以作弊dynamic(为您做反射,并缓存优化的性能策略等):
Evil((dynamic)myVariable);
...
void Evil<T>(T val)
{
var myTestClass = new TestClass<T>();
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |