【发布时间】:2010-11-19 04:38:50
【问题描述】:
我有以下函数来获取卡的验证错误。我的问题与处理 GetErrors 有关。两种方法都有相同的返回类型IEnumerable<ErrorInfo>。
private static IEnumerable<ErrorInfo> GetErrors(Card card)
{
var errors = GetMoreErrors(card);
foreach (var e in errors)
yield return e;
// further yield returns for more validation errors
}
是否可以将GetMoreErrors 中的所有错误都返回而不必枚举它们?
【问题讨论】:
-
我很高兴(也很好奇!)看到出现更多收益回报问题 - 我自己也不太明白。不是一个愚蠢的问题!
-
return GetMoreErrors(card); 有什么问题?
-
@Sam:“更多的验证错误会带来更多收益”
-
从非歧义语言的角度来看,一个问题是该方法无法知道是否有任何东西同时实现了 T 和 IEnumerable
。所以你需要一个不同的产量结构。也就是说,有办法做到这一点肯定会很好。 Yield return yield foo,也许,foo 在哪里实现 IEnumerable ? -
对于那些感兴趣的人,对此的 C# 语言功能请求位于此处:github.com/dotnet/csharplang/issues/378,我相信。
标签: c# ienumerable yield yield-return