抛出异常后将值设置为静态属性

时间:2013-04-19 13:05:17

标签: c# exception properties static

我在静态属性下面有这个:

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

现在我在初始化_field之前访问此属性,因此抛出异常。现在,当我尝试为此属性设置一个值时,它仍会抛出异常。现在,如何从get调用中抛出异常后,如何为此属性设置值?

1 个答案:

答案 0 :(得分:3)

当您“尝试设置值”时,不会抛出异常,只有在您未初始化时才尝试读取它。

在我看来it's not best practices从属性的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中抛出异常。物业吸气剂   应该是没有任何先决条件的简单操作。如果是一个吸气剂   可能会抛出异常,考虑重新设计属性为a   方法。此建议不适用于索引器。索引器可以   由于参数无效而抛出异常