【发布时间】: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 方法不同..
【问题讨论】:
int num;
int.TryParse("5",out num, 10);
这将与 TryParse 执行相同的操作,但如果解析失败,则会附加, out 参数将得到默认值 10
我可以实现吗?
使用扩展方法,我可以实现以下功能:
int num;
num.TryParse("5",out num, 10);
但这看起来与其他 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
【讨论】:
你可以为字符串创建一个扩展方法:
int num;
"5".TryParse(out num, 10);
【讨论】:
没有办法实现静态扩展方法。看这个问题: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 类。
【讨论】:
你不能创建静态扩展方法,所以很遗憾你不能做你想做的事。
如果您真的不喜欢目前所拥有的(非静态方法),那么您可以按照@Jamiec 的回答使用该静态方法创建自己的类。
【讨论】:
TryParse 返回一个布尔值来说明解析是否有效。所以:
int num;
if (!num.TryParse("5", out num))
{
num = 10;
}
您不能将其用作扩展方法,但您仍然可以将其作为静态方法保留在适当的位置。
【讨论】:
您不能扩展TryParse。既是因为它是一个静态方法,又因为 Int32 是一个结构,不能从中继承。
不过,您可以编写自己的 extension method。
【讨论】: