C# 如果只有类型和值的字符串表示,如何实例化已设置为特定值的类型实例?

C# 如果只有类型和值的字符串表示,如何实例化已设置为特定值的类型实例?,c#,types,activator,createinstance,C#,Types,Activator,Createinstance,我有以下四条弦;两对,每对都有一个表示值及其数据类型的字符串 string stringValueOfA = "Hello World!"; string stringTypeOfA = "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; string stringValueOfB = "44"; string stringTypeOfB = "Syste

我有以下四条弦;两对,每对都有一个表示值及其数据类型的字符串

string stringValueOfA = "Hello World!";
string stringTypeOfA  = "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";

string stringValueOfB = "44";
string stringTypeOfB  = "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
我知道我可以得到每一种类型,就像这样

var typeOfA = Type.GetType(stringTypeOfA);
var typeOfB = Type.GetType(stringTypeOfB);
…我可以像这样激活所述类型的新实例

var a = Activator.CreateInstance(typeOfA);
var b = Activator.CreateInstance(typeOfB);
…但我不确定如何创建设置为其字符串表示形式中编码的值的实例
stringValueOfA
stringValueOfB


不管是什么解决方案,如果可能的话,我也希望避免拳击。我不认为是这样,但我希望我错了。

Activator.CreateInstance,使用无参数构造函数创建指定泛型类型参数指定类型的实例。创建实例后,必须设置该值

Activator.CreateInstance(typeOfA);

编译器使用CreateInstance()泛型方法来实现由类型参数指定的类型的实例化。阅读更多。

许多BCL类型,包括
String
Int32
,都有关联的类型转换器,可用于将字符串转换为这些类型的实例,反之亦然。如果您使用的是其中一种类型,则可以解析如下字符串:

public static object ConvertFromString(string typeName, string value)
{
    Type type = Type.GetType(typeName, true);
    TypeConverter converter = TypeDescriptor.GetConverter(type);
    return converter.ConvertFromString(value);
}
示例用法:

object valueOfA = ConvertFromString(stringTypeOfA, stringValueOfA); // returns "Hello World!"
object valueOfB = ConvertFromString(stringTypeOfB, stringValueOfB); // returns 44 as an int

注意:由于编译时不知道实际的类型,值类型的装箱是不可避免的。

是的,我知道激活器。那很容易。你错过了那句话的后半部分。“…创建一个初始化为字符串解析值的该类型的实例”同样,是的,我可以激活一个新类型,但当我无法访问解析方法时,如何使用字符串中包含的值初始化它?@MarqueIV:你不能传递值。它只是使用空构造函数创建一个实例,然后您必须专门设置值。这没有意义!如何设置int的值?int就是值!激活一个新的int将得到一个值为零的int,但是如果
stringValueOfA
是“3”,那么我需要一个值为3的int。我不能将3赋值为零。当然,我可以将该零存储在一个变量中,但是我需要将“3”赋给该变量,该变量将a)替换用激活器创建的变量,b)循环一整圈,因为它仍然无法从字符串中获取3的值!看起来,得到类型的类型转换器就是答案。激活器不会给你任何东西,宾果!是的,据我所知,这就是Parse在幕后所做的(或者至少与它所做的相似)。谢谢实际上,在许多情况下,类型转换器只调用关联类型的静态解析方法。类型转换器的好处在于,它们为您提供了一种标准化的、类型无关的、面向对象的方法来执行字符串转换。