.net 强制转换为任何类型

jpfvwuh4  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(180)

我有一个txt文件,我可以从中提取两个字符串(类型和值)。但是,我需要将它转换为正确的类型。请参见下面的代码。

string type;
string value;

//example 1 //from the txt file
type = "int";
value = "25";

//example 2
type = "double";
value = "1.3";

//example 3
type = "string";
value = "blablabla";

//conversion I would like to do:
dynamic finalResult = (type)element.Value; //this returns an error

我需要这样做,但是我不知道从字符串的内容创建一个对象类型。
我尝试声明一个Type:

Type myType = type;

但是我不知道如何正确地做。

kd3sttzy

kd3sttzy1#

以清晰和类型安全的名义,我认为您应该只使用switch表达式和各种.TryParse()方法的组合,让它返回泛型类型

static T? ReadVariable<T>(string type, string value) =>
    type switch  
    {  
        "int" => int.TryParse(value, out int val) ? val : null, //null or throw an ex
        "double" => double.TryParse(value, out double val) ? val : null,
        "string" => string.TryParse(value, out string val) ? val : null,
        "bool" => bool.TryParse(value, out bool val) ? val : null,
        //... etc
        _ => throw new NotSupportedException("This type is currently not supported")
    };

int? num = ReadVariable<int>("int", "99"); //nullable return

//nullable handling
int num = ReadVariable<int>("int", "99") ?? default(int); //int type's default value is 0
int num = ReadVariable<int>("int", "99").GetValueOrDefault(-1); //default to an int value of your choice

您 * 真的 * 会遇到需要解析出 * 任何 * 类型的情况吗?这种方法允许您对所发生的事情保持完全控制。使用dynamic可能比您预期的要麻烦得多
更新:感谢@ckuri指出您可能还希望使用try parse重载,该重载允许不变的文化,以便考虑国际编号方案。
更新2:添加了可空处理的示例

vyu0f0g1

vyu0f0g12#

这有用吗?

object result;
string value = "some value";
string type = "some type";
switch(type)
{
   case "int":
      result = Convert.ToInt32(value);
      break;
   case "double":
      result = Convert.ToDouble(value);
      break;
   case "string":
      result = value;
      break;
   // case "any other datatype":
   //    result = convert explicitly to that datatype
}

相关问题