C# 创建带有反射的变量实例

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

我想创建一个带有反射的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=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
实例的对象强制转换为type
System.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
实例的对象强制转换为type
System.type

您只需在方法上添加一个
,其中T:new()
contstraint,然后主体将是一行:
return new T()非常正确,并且会更安全,因为不实现无参数构造函数的类型可以在编译时提取。如果我没记错的话,还有一个泛型重载,所以您应该能够执行Activator.CreateInstance();您只需在方法上添加一个
where T:new()
contstraint,然后主体将是一行:
returnnewt()非常正确,并且会更安全,因为不实现无参数构造函数的类型可以在编译时提取。如果我没记错的话,还有一个泛型重载,所以您应该能够执行Activator.CreateInstance();你为什么要这么做?如果您知道变量的编译时类型,那么为什么不正常构造对象?为什么要这样做?如果您知道变量的编译时类型,那么为什么不正常构造对象呢?