私はちょうど約yield return
を見つけた、私は本当にいいようです。私はこのような方法でそれを使用します。既存のIEnumerableの末尾に値を追加するときの利回り戻り
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
を使用して、これを書き換えることは可能ですか?
注意。 –
@EricLippert Hah、確かに。私はいつもこれを間違って綴ります。このケースでは、私は実在のものをまだ取り上げていないので、その検証ルールの例だけです。 – Oliver