C# 使用RangeValidator时System.ArgumentException异常

C# 使用RangeValidator时System.ArgumentException异常,c#,type-conversion,C#,Type Conversion,因此,在MyBO课程中,我有: [NotNullValidator(MessageTemplate = "Cannot be null!")] [RangeValidator(0, RangeBoundaryType.Inclusive, 20, RangeBoundaryType.Inclusive, Ruleset="validate_x1")] public byte x1 { get; set; } 在测试课上:

因此,在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,一切正常。
请帮助。

我猜RangeValidator属性对字节值不起作用

如果你看这张照片,上面写着:

范围验证器可用于 实现 可比接口

我不相信BYTE是那种类型的

编辑:我得到了更正,字节数据类型确实实现了IComparable(刚刚在Reflector中签入),所以我现在不确定问题出在哪里。我会继续找


编辑:找到可能有帮助的内容。

除了@Jason所说的内容之外,还可以查看构造函数的none接受字节作为范围验证的参数的位置

话虽如此,如果您仍然想将其与byte进行比较,则可以使用。在这种情况下,它可能看起来像

[RangeValidator(typeof(Byte), "0", RangeBoundaryType.Inclusive, "20", RangeBoundaryType.Inclusive)]
请注意,上面这一行是根据我所能看到和解释的文档编写的。我还没有编写代码来测试这是否有效

这只是给你一个事情如何运作的想法

编辑:另一种方法是将属性的类型从byte更改为int