有谁知道为什么我们在GetClientValidationRules()实现中使用yield return?

时间:2017-03-31 05:09:56

标签: asp.net-mvc unobtrusive-validation

我见过很多例子,我正在实现一个自定义的不显眼的验证器。看到yield return用于在GetClientValidationRules()方法中返回一个ModelClientValidationRule,我感到很困惑。 有谁知道为什么使用它 - 是按顺序为每个规则调用GetClientValidationRules还是应该立即返回整个集合?

我确定我在这里使用它的方式,我可以用return语句替换它:

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var validationParameters = base.GetClientValidationParameters()
                .Union(new[] { new KeyValuePair<string, object>("requiredproperties", string.Join(",", RequiredProperties)) });
            var validationRule = new ModelClientValidationRule
            {
                ErrorMessage = FormatErrorMessage(metadata.DisplayName),
                ValidationType = this.GetValidationType()
            };
            foreach(var kvp in validationParameters)
            {
                validationRule.ValidationParameters.Add(kvp.Key.ToLowerInvariant(), kvp.Value);
            }
            yield return validationRule;
        }

有人可以解释这是否正确或是否有更好的方法可以在此处返回验证规则?

0 个答案:

没有答案
相关问题