C# 将字符串转换为简单类型
.Net framework包含一个名为Convert的优秀类,它允许在简单类型、日期时间类型和字符串类型之间进行转换。该类还支持实现IConvertible接口的类型转换 该类已在.Net framework的第一个版本中实现。在第一个.Net框架中有一些事情做得不太正确。例如,如果无法解析字符串,简单类型上的Parse方法将抛出异常,并且无法检查是否将提前抛出异常 Net Framework的未来版本通过引入解决此问题的TryParse方法消除了此缺陷 Convert类可以追溯到旧的Parse方法的时代,所以这个类上的ChangeType方法是实现的旧样式-如果不能执行转换,则抛出异常 请看下面的代码:C# 将字符串转换为简单类型,c#,.net,types,type-conversion,C#,.net,Types,Type Conversion,.Net framework包含一个名为Convert的优秀类,它允许在简单类型、日期时间类型和字符串类型之间进行转换。该类还支持实现IConvertible接口的类型转换 该类已在.Net framework的第一个版本中实现。在第一个.Net框架中有一些事情做得不太正确。例如,如果无法解析字符串,简单类型上的Parse方法将抛出异常,并且无法检查是否将提前抛出异常 Net Framework的未来版本通过引入解决此问题的TryParse方法消除了此缺陷 Convert类可以追溯到旧的Pars
public static T ConvertString<T>(string s, T @default)
{
try
{
return (T)Convert.ChangeType(s, typeof(T), CultureInfo.InvariantCulture);
}
catch (Exception)
{
return @default;
}
}
publicstatict-ConvertString(字符串s,T@default)
{
尝试
{
return(T)Convert.ChangeType(s,typeof(T),CultureInfo.InvariantCulture);
}
捕获(例外)
{
返回@default;
}
}
这段代码基本上符合我的要求。然而,我很想避免这种丑陋的尝试。我敢肯定,与TryParse类似,有一种现代方法可以在不使用“一网打尽”的情况下重写此代码。你能推荐一个吗?没有这样的方法,也永远不会有
Convert.Change
调用传递对象以执行转换的IConvertible
实现
由于iconvertable
接口未定义TryConvertTo
方法,因此无法编写TryConvertTo
方法。(向IConvertible
添加新方法将是一个重大突破性的变化)
微软有可能用其他方法创建一个
isaffectonvertible
接口,但我认为他们不会这样做。没有这样的方法,也永远不会有
Convert.Change
调用传递对象以执行转换的IConvertible
实现
由于iconvertable
接口未定义TryConvertTo
方法,因此无法编写TryConvertTo
方法。(向IConvertible
添加新方法将是一个重大突破性的变化)
微软有可能用其他方法创建一个
isaffectonvertible
接口,但我认为他们不会。如果try/catch很少发生(如格式错误),那么使用try/catch也没什么丢脸的。这是因为如果你大部分时间都在抓住机会,你就会有表现问题。是的,这也是我想避免的另一个原因。有时很难预测代码将如何使用/从何处调用,因此您希望做到“正确”。如果try/catch很少发生(例如,如果格式错误),那么使用try/catch也没有什么丢脸的。这是因为如果你大部分时间都在抓住机会,你就会有表现问题。是的,这也是我想避免的另一个原因。有时很难预测代码将如何使用/从何处调用,因此您希望做到“正确”。我的意思是,方法不是“类型上的方法”,而是作为实现某种功能的方法。不过,谢谢你的回答。为了扩展,我希望Convert类有一个新的不同版本,它本身可能不会绑定到IConvertible。你所能做的就是编写你自己的switch
语句。我指的方法不是“类型上的方法”,而是实现某种目标的方法。不过,谢谢你的回答。为了扩展,我希望Convert类有一个新的不同版本,它本身可能不会绑定到IConvertible。你所能做的就是编写你自己的switch
语句。