使用System.Configuration验证器验证double

时间:2015-11-27 15:45:55

标签: c# validation web-config app-config

我必须为我的库创建自定义配置部分。配置中的一个参数应为正双。但是,出于某种原因,我找不到任何Validator for double。

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

[ConfigurationProperty("someProp", IsRequired = false, DefaultValue = 15)]
[IntegerValidator(MaxValue = 200, MinValue = 0)]
public int SomeProperty
{
   get
   {
      return (int)this["someProp"];
   }
   set
   {
      this["someProp"] = value;
   }
}

我查看了Google,但未能找到DoubleValidator或FloatValidator。有可能以某种方式确保该物业是一个积极的双重? System.Configuration中是否存在DoubleValidator没有任何原因?也许我错了,双属性不应该存储在配置文件中。

2 个答案:

答案 0 :(得分:2)

我需要一个浮动验证器用于我自己的项目,并找到了你的问题。 这就是我制作验证器的方法。当/如果您使用它时,您应该记住在使用注释属性的ConfigurationPropertyAttribute上设置默认值。

感谢KasperVidebæk发现我的错误:ConfigurationValidatorBase validate method receives default value

Content-Disposition: inline; filename="filename.pdf"

要在配置属性

上使用的属性
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}");
        }
    }
}

答案 1 :(得分:-1)

您可以尝试使用RangeValidator。像

这样的东西
[Range(0,double.MaxValue, ErrorMessage = "Number must be positive. ")]
public float someProperty (...) { ...}

您可以看到此SO答案以获取更多示例https://stackoverflow.com/a/17164247