Ho appena scoperto circa yield return
, mi sembra davvero bello. Io lo uso in un metodo come questo:return return quando si aggiungono valori alla fine di un IEnumerable esistente
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.
}
Tuttavia, ho bisogno di cambiare questo metodo per restituire alcuni ValidationResults da un metodo bambino. Senza usare yield
, il codice sarebbe simile a questa:
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;
}
E 'possibile riscrivere questo utilizzando yield
?
nota che hai scritto male "arbitrario". –
@EricLippert Hah, infatti. Scrivo male tutto il tempo. In questo caso però è solo una regola di validazione di esempio, poiché non ho ancora elaborato i "veri". – Oliver