yield return при добавлении значений в конец существующего IEnumerable

Я только что узнал о 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?

6
задан Oliver 11 April 2012 в 11:47
поделиться