c# - C# 中有 "upto"方法吗?

标签 c#

下面是一段打印出 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/

相关文章:

c# - 具有完整子结构的矩阵的 "Matrix decomposition"

C#内存分配和链表实现

c# - onclick 时清除登录控件中的文本框

c# - 为什么 WCF 不能传递字典中的对象?

c# - 如何使用C#在POST请求中发送json数据

c# - 显式空检查与空合并运算符的编译器评估?

c# - 使用手机时需要从网站推荐手机应用商店链接

c# - 无法为接口(interface)添加约束

javascript 将 body_0$ 添加到 ID 选择器

c# - 不能将静态方法指定为接口(interface)的一部分?