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引发异常。