C# 创建带有反射的变量实例
我想创建一个带有反射的t类型的实例,即C# 创建带有反射的变量实例,c#,reflection,C#,Reflection,我想创建一个带有反射的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 类型t=类型(字符串); 字符串s=(t)Activator.CreateInstance(t);//这是因为转换失败 字符串s=A
Type t = typeof(string);
string s = (t)Activator.CreateInstance(t); // this fails because of convertion
string s = Activator.CreateInstance(t) as t // also fails
类型t=类型(字符串);
字符串s=(t)Activator.CreateInstance(t);//这是因为转换失败
字符串s=Activator.CreateInstance(t)as t//也会失败
有没有办法进行这种转换?
谢谢。试试这个:
string s = (string)Activator.CreateInstance(t);
Activator.CreateInstance返回对象中装箱的实例,因此必须将其转换为正确的类型,然后才能使用它
在您的示例中,t是类型对象变量,而不是类型引用。您必须像我的示例中那样直接指定类型,也可以使用泛型。尝试以下方法:
string s = (string)Activator.CreateInstance(t);
Activator.CreateInstance返回对象中装箱的实例,因此必须将其转换为正确的类型,然后才能使用它
在您的示例中,t是类型对象变量,而不是类型引用。您必须像我的示例中那样直接指定类型,也可以使用泛型。是。您必须转换为string
,而不是t
。您可能需要一个通用方法,或者:
public T GetInstance<T>()
{
Type t = typeof(T);
T s = (T)Activator.CreateIstance(t);
return s;
}
public T GetInstance()
{
类型t=类型(t);
ts=(T)Activator.CreateIstance(T);
返回s;
}
目前情况下,您正试图将实际上是System.String
实例的对象强制转换为typeSystem.type
…Yes。您必须转换为string
,而不是t
。您可能需要一个通用方法,或者:
public T GetInstance<T>()
{
Type t = typeof(T);
T s = (T)Activator.CreateIstance(t);
return s;
}
public T GetInstance()
{
类型t=类型(t);
ts=(T)Activator.CreateIstance(T);
返回s;
}
就目前情况而言,您正试图将一个实际上是System.String
实例的对象强制转换为typeSystem.type
…您只需在方法上添加一个,其中T:new()
contstraint,然后主体将是一行:return new T()代码>非常正确,并且会更安全,因为不实现无参数构造函数的类型可以在编译时提取。如果我没记错的话,还有一个泛型重载,所以您应该能够执行Activator.CreateInstance();您只需在方法上添加一个where T:new()
contstraint,然后主体将是一行:returnnewt()代码>非常正确,并且会更安全,因为不实现无参数构造函数的类型可以在编译时提取。如果我没记错的话,还有一个泛型重载,所以您应该能够执行Activator.CreateInstance();你为什么要这么做?如果您知道变量的编译时类型,那么为什么不正常构造对象?为什么要这样做?如果您知道变量的编译时类型,那么为什么不正常构造对象呢?