gpt4 book ai didi

c# - 如何处理 "infinite"IEnumerable?

转载 作者:IT王子 更新时间:2023-10-29 04:19:08 29 4
gpt4 key购买 nike

“无限”IEnumerable 的一个简单示例是

IEnumerable<int> Numbers() {
int i=0;
while(true) {
yield return unchecked(i++);
}
}

我知道,那个

foreach(int i in Numbers().Take(10)) {
Console.WriteLine(i);
}

var q = Numbers();
foreach(int i in q.Take(10)) {
Console.WriteLine(i);
}

两者都工作正常(并打印出数字 0-9)。

但是在复制或处理像 q 这样的表达式时有什么陷阱吗?我可以相信他们总是被评价为“懒惰”吗?产生死循环有什么危险吗?

最佳答案

只要您只调用懒惰的、无缓冲的方法就可以了。所以 SkipTakeSelect 等都可以。但是,MinCountOrderBy 等会变得疯狂。

它可以工作,但你需要谨慎。或注入(inject) Take(somethingFinite) 作为安全措施(或在数据过多后引发异常的其他自定义扩展方法)。

例如:

public static IEnumerable<T> SanityCheck<T>(this IEnumerable<T> data, int max) {
int i = 0;
foreach(T item in data) {
if(++i >= max) throw new InvalidOperationException();
yield return item;
}
}

关于c# - 如何处理 "infinite"IEnumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2740001/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com