我必须为我的库创建一个自定义配置节。配置中的一个参数应为正双精度。然而,由于某些原因,我找不到double的任何验证器。
例如,下面是我如何使用整数验证器:
[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?也许我错了,双重属性不应该存储在配置文件中。
发布于 2016-09-09 14:26:21
我需要一个浮点验证器来验证我自己的项目,我发现了你的问题。这就是我如何创建我的验证器的。当您使用它时/如果您使用它,您应该记住在您用来注释属性的ConfigurationPropertyAttribute上设置一个默认值。
感谢Kasper Videbík找到我的错误:ConfigurationValidatorBase validate method receives default value
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}");
}
}
}配置属性上要使用的属性
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);
}发布于 2015-11-28 00:14:19
你可以试试RangeValidator。就像这样
[Range(0,double.MaxValue, ErrorMessage = "Number must be positive. ")]
public float someProperty (...) { ...}你可以看到这一点,所以回答更多的例子https://stackoverflow.com/a/17164247。
https://stackoverflow.com/questions/33960814
复制相似问题