Convert.ChangeType对字符串值有意义吗?

问题描述

| 我在@hugoware上找到了一篇有关解析值的出色文章:http://hugoware.net/blog/more-control-when-parsing-values。我在项目中重新使用了他的代码示例,但是现在我注意到在最后一个块(他的代码的第154行)中,他使用Convert.ChangeType()方法作为最后一次“转换”值的尝试。 现在,我想知道这是否有意义,因为我们总是从字符串值开始,而且我猜Convert.ChangeType仅对值类型进行转换吗?尝试这样做是否有意义,否则它总是会失败吗?     

解决方法

您可以将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的接口(发生了!),那么可以将其转换为任何值可能是有意义的,您可以使用更通用的代码版本在第三方表示形式和对您的代码更有意义的另一种表示形式之间进行转换。     ,如果您只想转换字符串,我建议您使用ConvertToString / ConvertFromString
 TypeConverter converter = TypeDescriptor.GetConverter(type);
 string res = converter.ConvertToString(obj);
 object original = converter.ConvertFromString(res);
-