是否存在对收益返回内可枚举所有项目的标准模式?
更多的时候,比我想我找到了一些我的代码反映了以下模式:
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的结果的范围增加了我的代码的复杂性。 这将是不幸的,因为这样我希望存在一个更好的办法来管理收益率的回报模式。
不,是周围没有办法。
它一直要求一个功能,它不是一个坏主意(一个yield foreach
或等值的其他语言的存在)。
在这一点上微软根本没有分配来实现它的时间和资金。 他们可能会或可能不会落实到未来; 我猜(无事实依据),它的任务列表上的某个地方; 它只是,如果/当它得到足够高的名单上真正得到落实的问题。
我能看到的唯一可能的变化将是重构了所有的个人yield returns
从方法到自己的枚举返回方法的顶部,然后添加一个返回方法和串联的新方法methodReturningEnumerable(x,y,z)
它会更好; 不,可能不会。 该Concat
将在同样多的加回,你会救了,如果不是更多。
能不能做到。 这并不坏,虽然。 你可以把它缩短为一条直线:
foreach (var o in otherEnumerator) yield return o;
无关记:你应该小心的,你包括你的发电机是什么逻辑; 所有执行被推迟到GetEnumerator()
被调用的返回IEnumerable
。 我发现自己在扔NullArgumentException
小号错误这样如此频繁,我认为这是值得一提。 :)
文章来源: What is the proper pattern for handling Enumerable objects with a yield return?