1


0

RangeValidatorを使用する場合のSystem.ArgumentException

だから、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 Answer


2


@Jasonの発言に加えて、http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.validation.validators.rangevalidatorattribute.rangevalidatorattribute.aspx [this] where none none of the constructorをご覧ください。範囲検証のパラメーターとしてバイトを受け入れます。

とはいえ、バイトと比較したい場合は、http://msdn.microsoft.com/en-us/library/ee761763.aspx [this]を使用できます。 その場合、次のようになります

[RangeValidator(typeof(Byte), "0", RangeBoundaryType.Inclusive, "20", RangeBoundaryType.Inclusive)]

上記の行は、私が文書を見て解釈できる内容に基づいて書かれていることに注意してください。 これが機能するかどうかをテストするコードを作成していません。

これは、物事がどのように機能するかについてのアイデアを提供するためのものです。

編集:代わりに、プロパティのタイプをbyteからintに変更することもできます。


0


RangeValidator属性がBYTE値で機能しないと思いますか?

http://msdn.microsoft.com/en-us/library/cc309347.aspx [ドキュメント]を見ると、次のように書かれています。

_ Range Validatorは、IComparableインターフェイスを実装する任意のタイプで使用できます _

BYTEはこれらのタイプの1つではないと思いますか?

編集:私は修正された、BYTEデータ型はIComparable(Reflectorでチェックされたばかり)を実装するので、問題が何であるか今はわかりません。 探し続けます。

編集:https://stackoverflow.com/questions/727017/using-rangevalidator-with-byte [this]が見つかりました。