【发布时间】:2014-11-19 16:20:01
【问题描述】:
我正在编写验证逻辑,我希望调用者只获得他们真正需要的验证消息数量(某些情况下,只需要第一条验证消息,其他时候,我们希望现在所有的问题与给定数据)
鉴于此,我想“太棒了!我将返回一个 IEnumerable,并使用 yield 返回每个结果。如果在枚举中使用 FirstOrDefault(),则只会执行第一个失败的验证,其中以下将被跳过,除非我们在验证结果可枚举上调用 ToList()。
我看到的问题是,如果我想将我的验证逻辑分解为多个方法,每个方法都返回一个 Enumerable,我必须在那个集合上枚举另一个 yield return。 (参见下面的简化示例)
public IEnumerable<string> Validate(ClassToValidate obj)
{
if(string.IsNullOrEmpty(obj.Name)
{
yield return "empty name";
}
foreach(var message in ValidateSubObject(obj.OtherObjectToValidate))
{
yield return message;
}
}
private IEnumerable<string> ValidateSubObject(OtherClass objToValidate)
{
yield return ...
}
我是否缺少其他一些关键字,我可以从返回相同数据类型的另一个 IEnumerable 的其他方法“产生返回集”? IE。有没有比以下更简单的语法:
foreach(var message in ValidateSubObject(obj.OtherObjectToValidate))
{
yield return message;
}
【问题讨论】:
标签: c# yield-return