1

他のクラスが継承する基本クラスには、次のプロパティがあります。

private int DEFAULT_DISPLAY_ORDER = 999999;
private DateTime DEFAULT_DT = new DateTime(1111,1,1);

public int? Id {
    get 
    { 
        return Id.GetValueOrDefault(0);  
    }
    set 
    {
        if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;
        Id = value;
    }
}
public String Description { get; set; }
public int? DisplayOrder { get; set; }

しかし、実行すると、次のエラーが発生します。

+ $exception {
     Cannot evaluate expression because the current thread is in a stack 
     overflow state.}
     System.Exception {System.StackOverflowException}

オンライン

if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;

ここで一体何が起こっているのですか?

4

6 に答える 6

10

これを見てください:

public int? Id {
    get 
    { 
        return Id.GetValueOrDefault(0);  
    }

ここで、アクセスするIdには、最初に fetch... が必要ですId。バン。

次:

set 
{
    if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;
    Id = value;
}

第二部を見てください。を設定するにIdは、... のセッターを呼び出す必要がありますId。バン。

これにはフィールドが必要です。

private int? id;

// Now use the field in the property bodies
public int? Id {
    get 
    { 
        return id.GetValueOrDefault(0);  
    }
    set 
    {
        if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;
        id = value;
    }
}
于 2012-08-07T13:59:00.517 に答える
3

あなたはそれ自体から Id を呼び出しています-無限に再帰的です...良くありません:)

public int? Id {
    get 
    { 
        return Id.GetValueOrDefault(0); // This will keep calling the getter of Id. You need a backing field instead.
    }
    set 
    {
        if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;
        Id = value; // And here...
    }
}
于 2012-08-07T13:58:29.887 に答える
1

Id プロパティの get と set で Id プロパティを参照しているため、無限ループを作成しています:P。したがって、get では、getting を取得することになります ;)。そしてセットでは、設定を設定する設定をしています。変でしょ?:)

于 2012-08-07T14:00:21.430 に答える
1

ID = valueループを開始します。_idプロパティのセッター部分とゲッター部分で、プライベート変数のようなものを使用する必要があります。

于 2012-08-07T13:58:33.843 に答える
0
Id = value;

これはそうです。同じプロパティ内のプロパティに再帰的な割り当てを行っています。

于 2012-08-07T13:59:16.557 に答える
0

Id を呼び出すと、何度も再帰的に Id を呼び出します。

return Id.GetValueOrDefault(0);
于 2012-08-07T13:59:44.417 に答える