微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

构造函数链中的占位符?

如何解决构造函数链中的占位符?

我正在浏览一个材料,自定义验证逻辑的代码如下:-

public class MaxAttribute : ValidationAttribute
{
   public MaxAttribute(int maxWords) : base("{0} has too many words.")
   {
       _maxWords = maxWords;
   }
   public override ValidationResult IsValid(object value,ValidationContext validationContext)
   {
       if(value != null)
       {
         var valueAsstring = value.ToString();
         if(valueAsstring.Split(' ').Length > _maxWords)
         {
           var errorMessage = FormatErrorMessage(validationContext.displayName);
           return new ValidationResult(errorMessage);
         }
       }
       return ValidationResult.Success;
   }
       private readonly int _maxWords;
}

它说,

占位符存在调用继承的FormatErrorMessage方法,将使用属性显示名称自动格式化字符串。"

我无法想象流程会是什么样子? 我只知道当我输入这个词时,

   [MaxWords(10)]
   public string Name{get;set}

MaxWordsAttribute(int maxWords) 构造函数将被调用,该构造函数调用基础构造函数 :base({0}...) FormatErrorMessage 的调用将在何时以及如何填充占位符?

解决方法

要查看的地方是对 FormatErrorMessage 的调用:这是构造错误消息的地方。所以let's take a look

public virtual string FormatErrorMessage(string name) =>
    string.Format(CultureInfo.CurrentCulture,ErrorMessageString,name);

那个 ErrorMessageString 是您传递给基本构造函数的字符串(在 slightly roundabout way 中)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。