-->

什么是用于处理可枚举对象具有产量返回正确的模式?(What is the proper patter

2019-07-03 21:16发布

是否存在对收益返回内可枚举所有项目的标准模式?

更多的时候,比我想我找到了一些我的代码反映了以下模式:

    public IEnumerable<object> YieldReturningFunction()
    {

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

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

    }

foreach循环的明确的使用只是为了代码味道的可枚举恶臭的结果返回给我。

很显然,我可以放弃使用的yield return通过明确构建一个可枚举并添加每个标准收益率回归到它的结果,以及添加的methodReturningEnumerable的结果的范围增加了我的代码的复杂性。 这将是不幸的,因为这样我希望存在一个更好的办法来管理收益率的回报模式。

Answer 1:

不,是周围没有办法。

它一直要求一个功能,它不是一个坏主意(一个yield foreach或等值的其他语言的存在)。

在这一点上微软根本没有分配来实现它的时间和资金。 他们可能会或可能不会落实到未来; 我猜(无事实依据),它的任务列表上的某个地方; 它只是,如果/当它得到足够高的名单上真正得到落实的问题。

我能看到的唯一可能的变化将是重构了所有的个人yield returns从方法到自己的枚举返回方法的顶部,然后添加一个返回方法和串联的新方法methodReturningEnumerable(x,y,z) 它会更好; 不,可能不会。 该Concat将在同样多的加回,你会救了,如果不是更多。



Answer 2:

能不能做到。 这并不坏,虽然。 你可以把它缩短为一条直线:

foreach (var o in otherEnumerator) yield return o;

无关记:你应该小心的,你包括你的发电机是什么逻辑; 所有执行被推迟到GetEnumerator()被调用的返回IEnumerable 。 我发现自己在扔NullArgumentException小号错误这样如此频繁,我认为这是值得一提。 :)



文章来源: What is the proper pattern for handling Enumerable objects with a yield return?