所以,在MyBO课程中,我有:
[NotNullValidator(MessageTemplate = "Cannot be null!")]
[RangeValidator(0, RangeBoundaryType.Inclusive, 20, RangeBoundaryType.Inclusive, Ruleset="validate_x1")]
public byte x1
{
get;
set;
}
在测试课上:
[TestMethod()]
public void x1Test()
{
MyBO target = new MyBO() { x1 = (byte)20 };
ValidationResults vr = Validation.Validate(target, "validate_x1");
Assert.IsTrue(vr.IsValid);
}
为什么我得到:测试方法TestProject.CatedraBOTest.x1Test引发异常:System.ArgumentException:对象必须是Int32类型的??
我真的不明白。 如果我删除RangeValidator一切正常。 请帮忙。
答案 0 :(得分:2)
添加@Jason所说的内容,查看构造函数 none 的this接受字节作为范围验证的参数。
话虽如此,如果您仍想将其与字节进行比较,则可以使用this。在这种情况下,它可能看起来像
[RangeValidator(typeof(Byte), "0", RangeBoundaryType.Inclusive, "20", RangeBoundaryType.Inclusive)]
请注意,上述内容是根据我所看到的内容编写的。解释文件。我没有编写代码来测试这是否有效。
这只是为了让您了解事情的运作方式。
编辑:替代方法可以是将属性的类型从byte更改为int。
答案 1 :(得分:0)
我猜测RangeValidator属性对BYTE值不起作用?
如果你看documentation它说:
Range Validator可以与。一起使用 任何实现的类型 IComparable接口
我不相信BYTE是其中之一吗?
编辑:我立即纠正,BYTE数据类型确实实现了IComparable(刚刚在Reflector中检查过),所以我现在不确定是什么问题。我会继续寻找......编辑:找到可能有用的this。