0

次のようなエラーが表示されます

「タイプ 'System.StackOverflowException' の未処理の例外が ciscontrols.dll で発生しました」.

私のコードは以下のとおりです

    private int _vin;

    public int MaxLength
    {
        get { return _vin; }

        set //Here your answer solve the promblem
        {
            txtLocl.MaxLength = value;
            if (value < 2)
            {
                throw new ArgumentOutOfRangeException("MaxLength","MaxLength MinValue should be 2.");
            }
            else this._vin = value;
        }
    }

小数点以下の新しいプロパティを作成しています

private int Dval;
    public int DecPlaces
    {
        get { return Dval; }
        set// here it showing the same error
        {
            DecPlaces = value; // MaxLength is a preDefined Property but  DecPlaces created by me.
            if (value < 2)
            {
                throw new ArgumentOutOfRangeException("decplaces", "decimal places minimum value should be 2.");
            }
            else this.Dval = value;
        }
    }
4

3 に答える 3

2

あなたが持っているので、あなたのセッターは再帰的です

this.MaxLength = value;

セッター内。これにより、無限ループが発生し、最終的にはStackOverflowException.

使用する

this._vin = value;

その代わり

于 2013-03-08T03:50:06.013 に答える
2

あなたのプロパティのセッターは、この行で自分自身を呼び出しています:

 this.MaxLength = value;

次のように変更します。

set //Here i am getting Error
{
    txtLocl.MaxLength = value;
    if (value < 2)
    {
        throw new ArgumentOutOfRangeException("MaxLength","MaxLength MinValue should be 2.");
    }
    else this._vin = value;
}

この特定の例外については、デバッグ中に Visual Studio に表示される [コール スタック] ウィンドウは、どのメソッドが無限ループで相互に呼び出しているかを確認するのに役立ちます。プロパティのセッターは、最終的に実行時に set_MaxLength と呼ばれるメソッドになります。

于 2013-03-08T03:50:57.230 に答える
1
this.MaxLength = value

この行は、既に使用しているアクセサーを呼び出すため、無限ループをトリガーしsetます。代わりにバッキング変数の値を設定するつもりでしたか?

于 2013-03-08T03:50:20.017 に答える