转换为以字符串格式指定的数据类型

Mix*_*oid 3 c# type-conversion

我一直在寻找解决方案已经有一段时间了,并且找不到任何接近的东西.

我想要实现的目标:
我有两个字符串,'a'和'b'.字符串'a'包含数据类型,例如"Boolean".
字符串b包含类似"1"或"False"的值,可以是任何值.
我希望能够将字符串'b'的值存储在具有字符串'a'的数据类型的变量中.

如果我想通过一个结果列表来使用与示例中给出的值相同的结果,结果如下:

Foreach(var value in MyList)
{
  if(!var ConvertTo a) //Result would be negative because for "1" for it is not a boolean value, however if 'a' is "Int32" the result would be true.
    continue;  
  else 
  {//The value "False" is convertable to boolean, so the result would true
    Create a variable with datatype boolean with the value 'false'.
  }
}
Run Code Online (Sandbox Code Playgroud)

或多或少,我正在寻找一些扼杀黑客版本的TryParse().

我在我的例子中使用了boolean,但这可以是任何数据类型.至少我应该能够处理至少以下数据类型:

  • Int,Int32,Int64
  • 布尔
  • 浮点数,小数
  • 约会时间

我的问题:
是否有可能以任何方式(尝试)将值转换为字符串中给出的任何数据类型?

我希望我的问题和例子很清楚,如果没有,请发表评论.

Bas*_*Bas 7

您必须将字符串映射到类型.由于并非所有这些都是System.<yourType>直接的,我会考虑创建一个映射:

Dictionary<string, Type> types = new Dictionary<string, Type>();
types.Add("int", typeof(System.Int32);
//etc.
Run Code Online (Sandbox Code Playgroud)

然后,使用Convert.ChangeType获取您的对象:

object myObj = Convert.ChangeType(b, types[a]);
Run Code Online (Sandbox Code Playgroud)

也许你可以通过尝试获取类型来扩展它,如果你的类型映射中不存在键:

object myObj = Convert.ChangeType(b, Type.GetType("System." + a));
Run Code Online (Sandbox Code Playgroud)