Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在引发异常后将值设置为static属性_C#_Exception_Properties_Static - Fatal编程技术网

C# 在引发异常后将值设置为static属性

C# 在引发异常后将值设置为static属性,c#,exception,properties,static,C#,Exception,Properties,Static,我有以下静态属性: private static _field; public static MyProperty { get { if(_field !=null) { return _field; } else { throw new NullReferenceException();

我有以下静态属性:

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

现在,在初始化
\u字段
并因此引发异常之前,我访问此属性。现在,当我尝试为这个属性设置一个值时,它仍然抛出异常。现在,在从其
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;
    }
}
:

避免从属性获取程序引发异常。属性吸气剂 应该是没有任何先决条件的简单操作。如果你是个能手 可能引发异常,请考虑重新设计属性为 方法。本建议不适用于索引器。索引器可以 由于参数无效而引发异常


“尝试设置值”时不会引发异常,只有在未初始化时尝试读取时才会引发异常

在我看来,从属性的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;
    }
}
:

避免从属性获取程序引发异常。属性吸气剂 应该是没有任何先决条件的简单操作。如果你是个能手 可能引发异常,请考虑重新设计属性为 方法。本建议不适用于索引器。索引器可以 由于参数无效而引发异常


你能展示失败的代码吗?我无法重现你描述的行为。当我做
MyProperty=someObject时它不会引发异常。所以这个错误肯定在别的地方。我同意乔恩的看法。请提供代码,以便我们了解您如何尝试使用MyProperty类。您可能再次调用getter?插入属性getter是违反最佳做法的:
避免从属性getter引发异常。
能否显示失败的代码?我无法重现您描述的行为。当我做
MyProperty=someObject时它不会引发异常。所以这个错误肯定在别的地方。我同意乔恩的看法。请提供代码,以便我们了解您如何尝试使用MyProperty类。您可能再次调用getter?插入属性getter有违最佳做法:
避免从属性getter引发异常。