0

以下の静的プロパティがあります。

private static _field;
public static MyProperty
{
    get
      {
         if(_field !=null)
            {
               return _field;
            }
          else
            {
               throw new NullReferenceException();
            }
       }
    set
       {
           _field=value;
       }
}

現在、初期化される前にこのプロパティにアクセスしている_fieldため、例外がスローされます。このプロパティに値を設定しようとすると、まだ例外がスローされます。get呼び出しから例外がスローされた後、このプロパティに値を設定するにはどうすればよいでしょうか?

4

1 に答える 1

3

「値を設定しようとした」場合は例外がスローされず、初期化されていないときに読み取ろうとした場合にのみスローされます。

私の意見では、プロパティの get アクセサーから例外を発生させることはベスト プラクティスではありません。次に、デフォルト値を返すか、フィールドを返す前にデフォルト値で初期化する必要があります。そうすれば、そのような問題は回避できます。

このようなことがあなたの問題をどこかで引き起こしていると思います:

if(MyProperty == SomeValue) // --> your custom  exception was already thrown
{
    // you never get here
}

この方法でそれを行うことができます:

private static _field;
public static MyProperty
{
    get
    {
         if(_field ==null)
         {
               _field = defaultValue;
         }
         return _field;
    }
    set
    {
         _field=value;
    }
}

MSDN :

プロパティ ゲッターから例外をスローしないようにします。プロパティの getter は、前提条件のない単純な操作である必要があります。getter が例外をスローする可能性がある場合は、プロパティを再設計してメソッドにすることを検討してください。この推奨事項は、インデクサーには適用されません。インデクサーは、無効な引数が原因で例外をスローする可能性があります

于 2013-04-19T13:13:57.070 に答える