2011-05-24 82 views
2

关于解析值,我发现@hugoware这篇伟大的文章:http://hugoware.net/blog/more-control-when-parsing-values。我在项目中重用了他的代码示例,但现在我注意到在最后一个块(他的代码行154)中,他使用Convert.ChangeType()方法作为最后一次尝试“转换”该值。Convert.ChangeType()对字符串值有意义吗?

现在我不知道这是否合理,因为我们总是从一个字符串值开始,我猜Convert.ChangeType只对值类型进行转换?尝试这样做还是会失败?

回答

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的接口在第三方表示和另一种表示之间进行转换的代码的更通用版本,这对您的代码更有意义。

+0

好,所以他的代码将是一个内置的值类型的回退,没有静态的Parse方法(如果有的话)... – Koen 2011-05-24 09:44:06

9

如果你只是要转换的字符串,我建议你用ConvertToString/ConvertFromString

TypeConverter converter = TypeDescriptor.GetConverter(type); 
string res = converter.ConvertToString(obj); 
object original = converter.ConvertFromString(res); 

-

+0

这是什么转换静态调用使用?也就是说,'Convert.ToInt32(“2010”);' – 2011-05-24 09:40:51

相关问题