使用yield return处理Enumerable对象的正确模式是什么?

rhe*_*one 5 c# ienumerable design-patterns yield-return

是否存在返回Enumerable中所有项的yield的标准模式?

我经常发现我的一些代码反映了以下模式:

    public IEnumerable<object> YieldReturningFunction()
    {

        ...
        [logic and various standard yield return]
        ...

        foreach(object obj in methodReturningEnumerable(x,y,z))
        {
            yield return obj;
        }

    }
Run Code Online (Sandbox Code Playgroud)

foreach循环的显式用法仅仅是为了向我返回可枚举的代码味​​道的结果.

显然,我可以放弃使用yield return来增加代码的复杂性,方法是显式构建一个Enumerable并将每个标准yield return的结果添加到它中,并添加methodReturningEnumerable结果的范围.这将是不幸的,因此我希望有一种更好的方法来管理收益率回报模式.

Ser*_*rvy 5

不,没有办法解决这个问题.

这是一个被要求的功能,这并不是一个坏主意(yield foreach在其他语言中存在或等效).

此时,微软根本没有分配时间和金钱来实施它.他们将来可能会也可能不会实施它; 我猜(没有任何事实依据)它是在待办事项清单上的某个地方; 这只是一个问题,它是否/何时在该列表上足够高以实际实现.

我能看到的唯一可能的变化是将yield returns方法顶部的所有个体重构为它们自己的可枚举返回方法,然后添加一个返回该方法和的连接的新方法methodReturningEnumerable(x,y,z).会更好吗?不,可能不是.Concat如果不是更多的话,那就会增加你想要保存的数量.

  • 我将此标记为已接受的答案,不是因为它给了我正在寻找的答案,而是因为它解释了为什么我正在寻找的答案尚未存在. (2认同)