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

本文关键字:静态 属性 设置 抛出异常 | 更新日期: 2023-09-27 18:09:57

我在下面设置了静态属性:

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

现在我在_field初始化之前访问了这个属性,因此抛出了一个异常。当我尝试为这个属性设置值时,它仍然会抛出异常。现在我怎么能设置值这个属性后,一个异常已经抛出从它的get调用?

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

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

在我看来,从属性的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可能抛出异常,请考虑将属性重新设计为方法。此建议不适用于索引器。索引器可以因无效参数引发异常