我在@hugoware找到了关于解析值http://hugoware.net/blog/more-control-when-parsing-values的好文章。我在项目中重复使用了他的代码示例,但现在我注意到在最后一个块(他的代码的第154行)中他使用Convert.ChangeType()方法作为“转换”值的最后一次尝试。
现在我想知道这是否有意义,因为我们总是从字符串值开始,我猜Convert.ChangeType只对值类型进行转换?尝试它会有意义还是总是失败?
答案 0 :(得分:10)
如果您只想转换字符串,建议您使用ConvertToString / ConvertFromString
TypeConverter converter = TypeDescriptor.GetConverter(type);
string res = converter.ConvertToString(obj);
object original = converter.ConvertFromString(res);
-
答案 1 :(得分:1)
您可以将Convert.ChangeType()与字符串一起使用。请参阅MSDN文档:ChangeType
来自MSDN:
string s = "12/12/98";
DateTime dt = (DateTime)Convert.ChangeType(s, typeof(DateTime));
在上述情况下,从字符串转换是有意义的。
通过使用这种方法,我认为可以进一步扩展它以应对非字符串值,例如
private static bool _PerformConvert<T,U>( U value, ref T result )
{
object convert = Convert.ChangeType(value, typeof(U) );
// Continue ...
}
能够从任何值转换可能是有意义的,例如,如果你有一个提供对象的数字表示的第三方dll的接口(它已经发生!)你可以使用更通用的版本在第三方表示和另一种对代码更有意义的表示之间进行转换的代码。