我可以扩展int.TryParse方法

本文关键字:方法 TryParse int 扩展 我可以 | 更新日期: 2023-09-27 18:09:08

我希望我有以下方法

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

将执行与TryParse相同的操作,但如果解析失败,则额外执行。out参数将获得默认值10

我可以实现它吗?

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

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

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

我可以扩展int.TryParse方法

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

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

不编写辅助方法的一行代码是:

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


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

您可以为string创建一个扩展方法:

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

没有办法实现静态扩展方法。看看这个问题:静态扩展方法
方法:
a.在非int型字符串上实现扩展方法:

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类

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

如果你真的不喜欢你到目前为止得到的(非静态方法),那么你可以按照@Jamiec的答案用静态方法创建你自己的类

TryParse返回一个布尔值,表示解析是否成功。所以:

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

你不能使用它作为一个扩展方法,但你仍然可以把它作为一个静态方法。

不能扩展TryParse。因为它是一个静态方法,而且因为Int32是一个结构体,所以不能继承。

你可以自己写扩展方法