代码之家  ›  专栏  ›  技术社区  ›  Andrew Savinykh

将字符串转换为简单类型

  •  1
  • Andrew Savinykh  · 技术社区  · 14 年前

    .NET框架包含一个名为convert的伟大类,它允许在简单类型、日期时间类型和字符串类型之间进行转换。类还支持实现IConvertible接口的类型的转换。

    该类已在.NET Framework的第一个版本中实现。在第一个.NET框架中有一些事情做得不太好。例如,如果无法分析字符串,简单类型的Parse方法将引发异常,并且无法检查是否将提前引发异常。

    未来版本的.NET框架通过引入解决此问题的typarse方法消除了这一缺陷。

    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类似,有一种现代方法可以在不使用catch all的情况下重写代码。你能推荐一个吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   SLaks    14 年前

    没有这样的方法,永远也不会有。

    Convert.Change 调用 IConvertible 为执行转换而传递它的对象的实现。

    自从 可想象的 接口未定义 TryConvertTo 方法,无法写入 TryCurtoto 方法。(将新方法添加到 可想象的 将是一个 专业 断裂变化)

    微软可以创建一个 ISafeConvertible 与其他方法接口,但我认为它们不会。