Ich habe gerade über yield return
herausgefunden, scheint mir wirklich nett. Ich benutze es in einem Verfahren wie folgt aus:Renditerückgabe beim Anhängen von Werten an das Ende eines vorhandenen 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.
}
Ich brauche aber diese Methode ändern einige ValidationResults von einem Kind Methode zurückzukehren. Ohne yield
zu verwenden, würde der Code wie folgt aussehen:
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;
}
Ist es möglich, dies mit yield
neu zu schreiben?
Beachten Sie, dass "willkürlich" falsch geschrieben haben. –
@EricLippert Hah, tatsächlich. Ich buchstabiere das die ganze Zeit falsch. In diesem Fall handelt es sich jedoch nur um eine Beispiel-Validierungsregel, da ich die "echten" noch nicht ausgearbeitet habe. – Oliver