gpt4 book ai didi

c# - 如果只有一个 yield,如何返回 IEnumerable 集合

转载 作者:行者123 更新时间:2023-11-30 16:29:04 26 4
gpt4 key购买 nike

如果我想返回输入集合,在迭代器 block 中使用 return 语句而不是 foreach 的最聪明的方法是什么?

public IEnumerable<T> Filter(IEnumerable<T> collection)
{
if (someCondition)
{
// return collection; - cannot be used because of "yield" bellow
foreach (T obj in collection)
{
yield return obj;
}
yield break;
}
yield return new T();
}

最佳答案

恐怕这就是您在迭代器 block 中所能做的所有事情。 F# 中没有等效的 yield!,也没有 yield foreach 的想法。很不幸,但事实就是这样:(

当然,您首先可以避免使用迭代器 block :

public IEnumerable<Class> Filter(IEnumerable<Class> collection)
{
return someCondition ? collection : Enumerable.Repeat(new Class(2), 1);
}

或者如果你有更复杂的逻辑:

public IEnumerable<Class> Filter(IEnumerable<Class> collection)
{
return someCondition ? collection : FilterImpl(collection);
}

private IEnumerable<Class> FilterImpl(IEnumerable<Class> collection)
{
yield return new Class(2);
yield return new Class(1);
// etc
}

关于c# - 如果只有一个 yield,如何返回 IEnumerable<T> 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6646037/

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