下面是一段打印出 0 到 9 数字平方的代码:
for (int i = 0; i < 10; i++)
Console.WriteLine(i*i);
通过 for
循环从 0 到 N 做 1 的事情是一个非常常见的习惯用法。
这是一个 UpTo
方法,表达了这一点:
class MathUtil
{
public static void UpTo(int n, Action<int> proc)
{
for (int i = 0; i < n; i++)
proc(i);
}
}
上面的正方形示例现在是:
MathUtil.UpTo(10, (i) => Console.WriteLine(i * i));
我的问题是,标准 C# 库是否带有类似上述 UpTo
的内容?
理想情况下,我希望有一种方法可以让“UpTo”成为所有整数对象的方法。所以我可以这样做:
var n = 10;
n.UpTo(...);
这在 C# 中可行吗?
最佳答案
把它变成一个 extension method (注意 n
参数之前的 this,它定义了此方法操作的类型):
static class MathUtil
{
public static void UpTo(this int n, Action<int> proc)
{
for (int i = 0; i < n; i++)
proc(i);
}
}
用法:
10.UpTo((i) => Console.WriteLine(i * i));
注意:虽然上述方法调用不是特别直观。请记住,代码是一次编写,多次阅读。
也许允许像下面这样的东西可能会稍微好一点,但老实说我还是会写一个foreach
循环。
0.UpTo(10 /*or 9 maybe*/, (i) => Console.WriteLine(i * i));
如果你想要这个,那么你可以像这样写一个扩展方法:
public static void UpTo(this int start, int end, Action<int> proc)
{
for (int i = start; i < end; i++)
proc(i);
}
更改 <
至 <=
如果你想要一个包容性的上限。
关于c# - C# 中有 "upto"方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8163946/