Я не настолько знаком с yield return
, как мог бы быть, но в этом случае я думаю, что способ, которым вы использовали yield return
в IsRequired
, использует неправильный инструмент для работы. Я бы структурировал это немного по-другому:
ValidatorHelper
// Note this function is almost unnecessary and might be better
// implemented in AddIfRequired if validation is this trivial.
public static bool IsRequired(string text)
{
return string.IsNullOrWhiteSpace(text);
}
PlayerValidator
private static void AddIfRequired(string text, string name, List<ValidationResult> validationResults)
{
if (ValidatorHelper.IsRequired(text))
requiredList.Add(new Required(name));
}
protected override IEnumerable<ValidationResult> Validate(PlayerModel entity, IValidationProvider validationProvider)
{
List<ValidationResult> validationResults = new List<ValidationResult>();
AddIfRequired(entity.Profile.FirstName, "First Name", validationResults);
AddIfRequired(entity.Profile.LastName, "Last Name", validationResults);
// ...
return validationResults;
}
Если вы действительно хотите использовать yield return
и сохранить себя, создавая список и проверяя все поля каждый раз (хотя я не думаю, что это будет проблемой производительности), вы можете сделать AddIfRequired
в ValidationResultIfRequired
Validate
в:
ValidationResult validationResult;
// ...
validationResult = ValidationResultIfRequired(entity.Profile.FirstName, "First Name");
if (validationResult != null)
yield return validationResult;
validationResult = ValidationResultIfRequired(entity.Profile.LastName, "Last Name");
// etc