c# - 我可以使用无限范围并对其进行操作吗?

标签 c# linq

Enumerable.Range(0, int.MaxValue)
          .Select(n => Math.Pow(n, 2))
          .Where(squared => squared % 2 != 0)
          .TakeWhile(squared => squared < 10000).Sum()

这段代码会遍历从 0 到最大范围的所有整数值,还是只遍历整数值以满足 take-while、where 和 select 运算符? 有人可以澄清一下吗?

编辑:我第一次尝试确保它按预期工作是愚蠢的。我撤销它:)

最佳答案

int.MaxValue + 5 溢出为负数。自己试试:

unchecked
{
    int count = int.MaxValue + 5;
    Console.WriteLine(count); // Prints -2147483644
}

Enumerable.Range 的第二个参数必须是非负数 - 因此异常(exception)。

不过,您当然可以在 LINQ 中使用无限序列。以下是此类序列的示例:

public IEnumerable<int> InfiniteCounter()
{
    int counter = 0;
    while (true)
    {
        unchecked
        {
            yield return counter;
            counter++;
        }
    }
}

当然,它也会溢出,但它会继续...

请注意,一些 LINQ 运算符(例如Reverse)需要读取所有 数据才能产生第一个结果。其他人(如 Select)可以在从输入中读取结果时保持流式处理结果。看我的Edulinq blog posts有关每个运算符的行为的详细信息(在 LINQ to Objects 中)。

关于c# - 我可以使用无限范围并对其进行操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5443939/

相关文章:

c# - 未找到 mshtml.HTMLDocumentClass 引用

c# - Winforms异步加载大数据?

c# - LINQ:从 linq 中调用方法?,我的方法返回匿名类型

.net - Array.Reverse() 与 Enumerable.Reverse<TSource>()

c# - 如何在mvc C#中加入和选择表数据?

C# Linq to XML,当 child 满足条件时获取 parent

c# - 下载网页的一部分 - 数据挖掘

c# - ASP.NET Web 应用程序导出的 excel 文件上的警告弹出窗口

C# - 将异步任务从一种类型转换为另一种类型

c# - 如何创建一个 linq 查询,该查询使用延迟执行返回列表中单词的不同 3 字母前缀