首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用System.Configuration验证器验证双精度

使用System.Configuration验证器验证双精度
EN

Stack Overflow用户
提问于 2015-11-27 23:45:55
回答 2查看 1.1K关注 0票数 3

我必须为我的库创建一个自定义配置节。配置中的一个参数应为正双精度。然而,由于某些原因,我找不到double的任何验证器。

例如,下面是我如何使用整数验证器:

代码语言:javascript
复制
[ConfigurationProperty("someProp", IsRequired = false, DefaultValue = 15)]
[IntegerValidator(MaxValue = 200, MinValue = 0)]
public int SomeProperty
{
   get
   {
      return (int)this["someProp"];
   }
   set
   {
      this["someProp"] = value;
   }
}

我在谷歌上找过了,没有找到任何关于DoubleValidator或FloatValidator的信息。有没有可能以某种方式确保该属性为正双精度?是否有任何原因导致System.Configuration中不存在DoubleValidator?也许我错了,双重属性不应该存储在配置文件中。

EN

回答 2

Stack Overflow用户

发布于 2016-09-09 14:26:21

我需要一个浮点验证器来验证我自己的项目,我发现了你的问题。这就是我如何创建我的验证器的。当您使用它时/如果您使用它,您应该记住在您用来注释属性的ConfigurationPropertyAttribute上设置一个默认值。

感谢Kasper Videbík找到我的错误:ConfigurationValidatorBase validate method receives default value

代码语言:javascript
复制
class DoubleValidator : ConfigurationValidatorBase
{
    public double MinValue { get; private set; }
    public double MaxValue { get; private set; }

    public DoubleValidator(double minValue, double maxValue)
    {
        MinValue = minValue;
        MaxValue = maxValue;
    }

    public override bool CanValidate(Type type)
    {
        return type == typeof(double);
    }

    public override void Validate(object obj)
    {
        double value;
        try
        {
            value = Convert.ToDouble(obj);
        }
        catch (Exception)
        {
            throw new ArgumentException();
        }

        if (value < MinValue)
        {
            throw new ConfigurationErrorsException($"Value too low, minimum value allowed: {MinValue}");
        }

        if (value > MaxValue)
        {
            throw new ConfigurationErrorsException($"Value too high, maximum value allowed: {MaxValue}");
        }
    }
}

配置属性上要使用的属性

代码语言:javascript
复制
class DoubleValidatorAttribute : ConfigurationValidatorAttribute
{
    public double MinValue { get; set; }
    public double MaxValue { get; set; }

    public DoubleValidatorAttribute(double minValue, double maxValue)
    {
        MinValue = minValue;
        MaxValue = maxValue;
    }

    public override ConfigurationValidatorBase ValidatorInstance => new DoubleValidator(MinValue, MaxValue);
}
票数 2
EN

Stack Overflow用户

发布于 2015-11-28 00:14:19

你可以试试RangeValidator。就像这样

代码语言:javascript
复制
[Range(0,double.MaxValue, ErrorMessage = "Number must be positive. ")]
public float someProperty (...) { ...}

你可以看到这一点,所以回答更多的例子https://stackoverflow.com/a/17164247

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33960814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档