我一直在尝试将字符串转换为 .NET 中的值类型,其中生成的值类型是未知的。我在代码中遇到的问题是我需要一个接受字符串的方法,并使用“最适合”的方法来填充结果值类型。如果机制找不到合适的匹配,则返回字符串。
这就是我想出的:
public static dynamic ConvertToType(string value)
{
Type[] types = new Type[]
{
typeof(System.SByte),
typeof(System.Byte),
typeof(System.Int16),
typeof(System.UInt16),
typeof(System.Int32),
typeof(System.UInt32),
typeof(System.Int64),
typeof(System.UInt64),
typeof(System.Single),
typeof(System.Double),
typeof(System.Decimal),
typeof(System.DateTime),
typeof(System.Guid)
};
foreach (Type type in types)
{
try
{
return Convert.ChangeType(value, type);
}
catch (Exception)
{
continue;
}
}
return value;
}
我觉得这种方法可能不是最佳实践,因为它只能匹配预定义的类型。
通常我发现 .NET 以比我的实现更好的方式适应这个功能,所以我的问题是:有没有更好的方法来解决这个问题和/或这个功能在 .NET 中实现得更好吗?
编辑:请注意,数组中类型的排序是为了使给定类型的“最佳拟合”尽可能准确。
编辑:根据 miniBill 的要求,我将如何使用该方法(简单示例!):
JsonDictionary["myKey"] = ConvertToType("255"); // 255 is a stringified json value, which should be assigned to myKey as a byte.