【发布时间】:2012-04-11 11:47:30
【问题描述】:
我刚刚发现yield return,我看起来真的很好。我以这样的方法使用它:
public IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
if (Name == "Arbitary")
yield return new ValidationResult("Bad Name.", new[] { "Name" });
else if (Email == "BadEmail")
yield return new ValidationResult("Bad Email.", new [] {"Email" });
// further rules follow.
}
但是,我需要更改此方法以从子方法返回一些 ValidationResults。如果不使用yield,代码将如下所示:
public override IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
// TryValidateObject fills the ICollection you pass it.
List<ValidationResult> retVal = new List<ValidationResult>();
Validator.TryValidateObject(this, vc, retVal, true);
if (Name == "Arbitary")
retVal.Add(new ValidationResult("Bad Name.", new[] { "Name" }));
else if (Email == "BadEmail")
retVal.Add(new ValidationResult("Bad Email.", new[] { "Email" }));
return retVal;
}
是否可以使用yield 重写它?
【问题讨论】:
-
请注意,您拼错了“arbitrary”。
-
@EricLippert 哈,确实。我一直拼错这个。在这种情况下,虽然它只是一个示例验证规则,因为我还没有制定出“真正的”规则。
标签: c# yield-return