在 LINQWhere
中是一个流式操作符。Where-asOrderByDescending
是非流媒体运营商。AFAIK,流媒体运营商只收集下一个必要的项目。非流式操作符一次评估整个数据流。
我看不到定义 Streaming Operator 的相关性。对我来说,延迟执行是多余的。以我编写了一个自定义扩展并使用 where 运算符和 orderby 使用它的示例为例。
public static class ExtensionStuff
{
public static IEnumerable<int> Where(this IEnumerable<int> sequence, Func<int, bool> predicate)
{
foreach (int i in sequence)
{
if (predicate(i))
{
yield return i;
}
}
}
}
public static void Main()
{
TestLinq3();
}
private static void TestLinq3()
{
int[] items = { 1, 2, 3,4 };
var selected = items.Where(i => i < 3)
.OrderByDescending(i => i);
Write(selected);
}
private static void Write(IEnumerable<int> selected)
{
foreach(var i in selected)
Console.WriteLine(i);
}
无论哪种情况,Where
都需要评估每个元素以确定哪些元素满足条件。它产生的事实似乎只是因为操作员获得了延迟执行而变得相关。
那么,流媒体运营商的重要性是什么?