我必须为我的库创建自定义配置部分。配置中的一个参数应为正双。但是,出于某种原因,我找不到任何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没有任何原因?也许我错了,双属性不应该存储在配置文件中。
答案 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。