我有这段代码:
Dim context = New System.ComponentModel.DataAnnotations.ValidationContext(p, Nothing, Nothing)
Dim results = New List(Of System.ComponentModel.DataAnnotations.ValidationResult)
Dim isValid = System.ComponentModel.DataAnnotations.Validator.TryValidateObject(p, context, results)
p是我尝试验证的对象。它有一个属性:
<Range(Double.Epsilon, Double.MaxValue, ErrorMessage:="Provide a positive amount value.")>
Public Property Amount As Decimal Implements ICrmOpportunityProductData.Amount
虽然我在验证时Amount为0(因此无效,因为0小于epsilon),isValid为true且结果列表中没有错误。为什么呢?
修改
为避免转换问题,我将范围属性更改为1:
验证<Range(1.0, Double.MaxValue, ErrorMessage:="Provide a positive amount value.")>
Public Property Amount As Decimal Implements ICrmOpportunityProductData.Amount
仍然验证不会返回Amount = 0的任何错误。
答案 0 :(得分:0)
msdn文档对于实际比较对象的方式似乎很模糊。 但其中一个页面 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.rangeattribute.operandtype%28v=vs.110%29.aspx 对象必须实现IComparable
的状态大多数谎言obj.CompareTo被调用而AFAIK(不是静态方法)Decimal.CompareTo方法抛出和ArgumentException如果传递任何不是十进制的
Double.Epsilon转换为十进制为0