【问题标题】:Can I extend int.TryParse method?我可以扩展 int.TryParse 方法吗?
【发布时间】:2011-11-21 20:32:59
【问题描述】:

我希望我有以下方法

int num;  
int.TryParse("5",out num, 10);

这将与 TryParse 执行相同的操作,但如果解析失败,则会附加, out 参数将得到默认值 10

我可以实现吗?

使用扩展方法,我可以实现以下功能:

int num;
num.TryParse("5",out num, 10);

但这看起来与其他 TryParse 方法不同..

【问题讨论】:

标签: c# parsing


【解决方案1】:

不能给已有的类添加静态方法,但是可以给自己的类添加自己的静态方法,例如:

public static class MyConversions
{
   public static bool TryParse(string value, out int num, int defaultValue)
   {
     ...
   }
}

【讨论】:

    【解决方案2】:

    没有编写辅助方法的单行代码是:

    int num = int.TryParse("5", out num) ? num : 10;
    


    这是一个字符串扩展方法:http://neue.cc/2010/04/09_251.html

    【讨论】:

      【解决方案3】:

      你可以为字符串创建一个扩展方法:

      int num;
      "5".TryParse(out num, 10);
      

      【讨论】:

        【解决方案4】:

        没有办法实现静态扩展方法。看这个问题:Static extension methods
        方法:
        一种。在字符串而非整数上实现扩展方法:

        public static int Parse(this string s, int defaultValue) {
           int result;
           return Int32.TryParse(s,out result) ? result : defaultValue;
        }
        ...
        int num = "5".Parse(10); //
        

        b.使用 TryParse(string, out int, int) 方法实现您自己的 IntUtil 类。

        【讨论】:

          【解决方案5】:

          你不能创建静态扩展方法,所以很遗憾你不能做你想做的事。

          如果您真的不喜欢目前所拥有的(非静态方法),那么您可以按照@Jamiec 的回答使用该静态方法创建自己的类。

          【讨论】:

            【解决方案6】:

            TryParse 返回一个布尔值来说明解析是否有效。所以:

            int num;
            if (!num.TryParse("5", out num))
            {
                num = 10;
            }
            

            您不能将其用作扩展方法,但您仍然可以将其作为静态方法保留在适当的位置。

            【讨论】:

              【解决方案7】:

              您不能扩展TryParse。既是因为它是一个静态方法,又因为 Int32 是一个结构,不能从中继承。

              不过,您可以编写自己的 extension method

              【讨论】:

                猜你喜欢
                • 2021-12-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-05-20
                • 2019-06-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多