使用RangeValidator时出现System.ArgumentException

时间:2010-01-28 19:02:08

标签: c# type-conversion

所以,在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一切正常。 请帮忙。

2 个答案:

答案 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