.Net框架包含一个名为Convert的伟大类,它允许在简单类型,DateTime类型和String类型之间进行转换。该类还支持转换实现IConvertible接口的类型。
该类已在.Net框架的第一个版本中实现。在第一个.Net框架中有一些事情做得不对。例如,如果无法解析字符串,则简单类型的.Parse方法会抛出异常,并且无法检查是否会提前抛出异常。
.Net Framework的未来版本通过引入解决此问题的TryParse方法消除了这一缺陷。
Convert类可以追溯到旧Parse方法的时间,因此该类中的ChangeType方法采用旧样式 - 如果无法执行转换,则抛出异常。
看看以下代码:
public static T ConvertString<T>(string s, T @default)
{
try
{
return (T)Convert.ChangeType(s, typeof(T), CultureInfo.InvariantCulture);
}
catch (Exception)
{
return @default;
}
}
这段代码基本上可以满足我的需求。但是我非常想在这里避免丑陋的尝试/捕获。我敢肯定,与TryParse类似,有一种现代的方法可以重写这段代码而不需要全部。你能推荐一个吗?
答案 0 :(得分:1)
没有这样的方法,也永远不会有。
Convert.Change
调用您传递的对象的IConvertible
实现来执行转换。
由于IConvertible
接口未定义TryConvertTo
方法,因此无法编写TryConvertTo
方法。 (向IConvertible
添加新方法将是主要重大变更)
Microsoft可以使用其他方法创建ISafeConvertible
接口,但我认为不会。