C# 将字符串转换为简单类型

C# 将字符串转换为简单类型,c#,.net,types,type-conversion,C#,.net,Types,Type Conversion,.Net framework包含一个名为Convert的优秀类,它允许在简单类型、日期时间类型和字符串类型之间进行转换。该类还支持实现IConvertible接口的类型转换 该类已在.Net framework的第一个版本中实现。在第一个.Net框架中有一些事情做得不太正确。例如,如果无法解析字符串,简单类型上的Parse方法将抛出异常,并且无法检查是否将提前抛出异常 Net Framework的未来版本通过引入解决此问题的TryParse方法消除了此缺陷 Convert类可以追溯到旧的Pars

.Net framework包含一个名为Convert的优秀类,它允许在简单类型、日期时间类型和字符串类型之间进行转换。该类还支持实现IConvertible接口的类型转换

该类已在.Net framework的第一个版本中实现。在第一个.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;
    }            
}
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
语句。