3

これは私のコードの私の財産です:

public KPage Padre
{
    get
    {
        if (k_oPagina.father != null)
        {
            this.Padre = new KPage((int)k_oPagina.father);
        }
        else
        {
            this.Padre = null;
        }

        return this.Padre;
    }
    set { }
}

しかし、それは言います:

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

なんで?どうすれば修正できますか?

編集

コードを修正した後、これは私の実際のコードです:

private KPage PadreInterno;
public KPage Padre
{
    get
    {
        if (PadreInterno == null)
        {
            if (paginaDB.father != null)
            {
                PadreInterno = new KPage((int)paginaDB.father);
            }
            else
            {
                PadreInterno= null;
            }
        }

        return PadreInterno;
    }
}

についてどう思いますか?

4

1 に答える 1

7

プロパティはそれ自体を呼び出しています...通常、プロパティは基になるフィールドを呼び出します:

   public KPage Padre
   {
       get
       {
           if (k_oPagina.father != null)
           {
               _padre = new KPage((int)k_oPagina.father);
           }
           else
           {
               _padre = null;
           }

           return _padre;
       }
       set { }
   }

   private KPage _padre;

古いコードはプロパティの を再帰的に呼び出していたgetためPadre、例外が発生しました。

コードが「取得」するだけで、値を保存する必要がない場合は、バッキング フィールドを完全に削除することもできます。

   public KPage Padre
   {
       get
       {
           return k_oPagina.father != null
              ? new KPage((int)k_oPagina.father)
              : (KPage)null;
       }
   }

つまり、これをメソッドに入れます。

これは、数日前に尋ねた問題と同じ問題でもあります。

タイプ 'System.StackOverflowException' の未処理の例外が発生しました

于 2012-04-07T16:18:52.077 に答える