我可以扩展int.TryParse方法吗?

时间:2011-09-21 11:04:43

标签: c# parsing

我希望我有以下方法

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

这将与TryParse相同,但如果解析失败,则为addtional, out参数将获得defualt值10

我可以实施吗?

使用扩展方法,我可以实现以下内容:

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

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

7 个答案:

答案 0 :(得分:6)

您不能向现有类添加静态方法,但可以将自己的静态方法添加到自己的类中,例如:

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

答案 1 :(得分:4)

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

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


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

答案 2 :(得分:2)

您可以为字符串创建扩展方法:

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

答案 3 :(得分:2)

无法实现静态扩展方法。看看这个问题: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); //

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

答案 4 :(得分:1)

你不能创建静态扩展方法,所以不幸的是你不能做你想做的事。

如果你真的不喜欢你到目前为止所拥有的(非静态方法),那么你可以根据@Jamiec的回答用静态方法创建自己的类。

答案 5 :(得分:1)

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

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

您不能将其用作扩展方法,但您仍然可以将其作为静态方法使用。

答案 6 :(得分:1)

您无法展开TryParse。两者都因为它是一个静态方法,因为Int32是一个结构,不能继承。

您可以编写自己的extension method