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 回答