我想用反射创建一个t类型的实例,即
Type t = typeof(string);
string s = (t)Activator.CreateInstance(t); // this fails because of convertion
string s = Activator.CreateInstance(t) as t // also fails
有没有办法进行这样的转换? 感谢。
答案 0 :(得分:4)
是。您必须转换为string
,而不是t
。您可能需要通用方法,或者:
public T GetInstance<T>()
{
Type t = typeof(T);
T s = (T)Activator.CreateIstance(t);
return s;
}
根据情况,您正在尝试将实际上是System.String
实例的对象转换为System.Type
...
答案 1 :(得分:1)
试试这个:
string s = (string)Activator.CreateInstance(t);
Activator.CreateInstance返回一个在对象中装箱的实例,因此必须先将其强制转换为正确的类型才能使用它。
在您的示例中,t是Type对象变量,而不是类型引用。您必须直接在我的示例中指定类型,或者您可以使用泛型。