我有一些代码可以在程序集中搜索所有类型的类型MyType<T>
。T
可以是我Activator.CreateInstance
用来创建这些类型的对象的任何类型。我需要将这些对象传递给期望的方法,MyType<T>
因此我需要以某种方式将每个对象从 Object (由返回Activator.CreateInstance
)转换为MyType<T>
.
问问题
712 次
1 回答
1
您需要的是 GetGenericTypeDefinition - MakeGenericType 组合的组合,以形成您自己的新类型。这是一个例子:
public class GenericTypeTest<T>
{
T value;
}
void MakeTest()
{
var newType = typeof(double);
var customType = typeof(GenericTypeTest<object>).GetGenericTypeDefinition().MakeGenericType(newType);
var createdObject = Activator.CreateInstance(customType);
}
如果你想使用 createdObject,它有点复杂,因为你不能“硬编码”任何东西:
public class GenericTypeTest<T>
{
public GenericTypeTest(T value)
{
this.value = value;
}
public T value {get; protected set; }
}
public void ShowSomething<T>(GenericTypeTest<T> genericContainer)
{
MessageBox.Show(genericContainer.value.ToString());
}
void MakeTest()
{
var newType = typeof(double); object newValue = 1.0;
var customType = typeof(GenericTypeTest<object>).GetGenericTypeDefinition().MakeGenericType(newType);
var createdObject = Activator.CreateInstance(customType, newValue);
this.GetType().GetMethod("ShowSomething").MakeGenericMethod(newType).Invoke(this, new object[] { createdObject });
}
于 2012-09-19T08:30:44.673 回答