<分区>
Possible Duplicate:
C# - Proper Use of yield return
C# yield 的实际用例是什么?
谢谢。
最佳答案
当你想要deferred execution .
这在大多数情况下都是有意义的,因为替代方案是构建一个临时集合。
考虑这个场景:我有一个整数列表,我想列出它们的平方数。
我可以这样做:
public static IEnumerable<int> Squares(this IEnumerable<int> numbers) {
List<int> squares = new List<int>();
foreach (int number in numbers)
squares.Add(number * number);
return squares;
}
然后我可以对平方求和,取它们的平均值,找到最大的,等等。
但我真的不需要填充一个全新的 List<int>
为了这个目的。我本可以使用 yield
枚举初始列表并逐个返回正方形:
public static IEnumerable<int> Squares(this IEnumerable<int> numbers) {
foreach (int number in numbers)
yield return number * number;
}
在您开始处理非常大的集合之前,这实际上会有所不同的事实可能并不明显,其中填充临时集合被证明是非常浪费的。
例如,假设我想找到高于特定阈值的第一个方 block 。我可以这样做:
IEnumerable<int> numbers = GetLotsOfNumbers();
var squares = numbers.Squares();
int firstBigSquare = squares
.Where(x => x >= 1000)
.FirstOrDefault();
但是如果我的Squares
方法填充了整个 List<int>
在返回之前,上述代码可能会做比必要的更多的工作。
关于c# - 什么时候真正需要 'Yield'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2990214/