我正在将字符串转换为基于另一个包含数据类型名称的字符串的数据类型。 我有两个字符串如下:
string string_1 = "true";
string string_2 = "System.Boolean";
我需要将字符串1转换为字符串2中指定的数据类型。我该怎么做?(请注意,string_2可以是每种数据类型) 我是否必须使用if来检查string_2与任何类型的数据类型?
答案 0 :(得分:1)
假设目标类型是Convertible
或Parse
的基元,您可以尝试以下方法:
object result;
string string_1 = "true";
string string_2 = "System.Boolean";
var targetType = Type.GetType(string_2);
if (typeof(IConvertible).IsAssignableFrom(targetType))
{
result = Convert.ChangeType(string_1, targetType);
}
else
{
var parseMethod = targetType.GetMethod("Parse", new[] {typeof (string)});
if (parseMethod != null)
result = parseMethod.Invoke(null, new object[] { string_1 });
}
请参阅ChangeType
答案 1 :(得分:1)
对于给定类型ChangeType
效果很好:
Convert.ChangeType(string_1, Type.GetType(string_2))
但是如果你有不同的类型,比如一个自己的类,这将不起作用。在这种情况下,没有这样的通用方法,因为框架现在不能如何解析值。如果您尝试,您将获得InvalidCastException
。在这种情况下,您只能手写转换器。
在特殊情况下,除了基元之外,您只有自己的类,您可以考虑在每个类中为作业使用静态转换方法。可能看起来像这样:
Type.GetType(string_2).GetMethod("convert").Invoke(string_1)
无论如何,这里没有很好的解决方案。恕我直言,手写的转换(用ifs做)是唯一正确的方法。