处理具有收益回报的可枚举对象的正确模式是什么



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

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

    public IEnumerable<object> YieldReturningFunction()
    {
        ...
        [logic and various standard yield return]
        ...
        foreach(object obj in methodReturningEnumerable(x,y,z))
        {
            yield return obj;
        }
    }

显式使用 foreach 循环只是为了向我返回可枚举代码的结果。

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

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

这是请求的功能

,这不是一个坏主意(其他语言中存在yield foreach或等效项)。

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

我能看到的唯一可能的更改是将所有单独的yield returns从方法的顶部重构为它们自己的可枚举返回方法,然后添加一个返回该方法串联的新方法并methodReturningEnumerable(x,y,z)。 会更好吗?不,可能不是。 Concat将添加与您节省的一样多,如果不是更多的话。

做不到。不过还不错。您可以将其缩短为一行:

foreach (var o in otherEnumerator) yield return o;

不相关的说明:你应该小心生成器中包含的逻辑;所有执行都被推迟到在返回的IEnumerable上调用GetEnumerator()。我发现自己经常以这种方式错误地扔NullArgumentException,我认为这值得一提。:)

相关内容

最新更新