我在静态属性下面有这个:
private static _field;
public static MyProperty
{
get
{
if(_field !=null)
{
return _field;
}
else
{
throw new NullReferenceException();
}
}
set
{
_field=value;
}
}
现在我在初始化_field
之前访问此属性,因此抛出异常。现在,当我尝试为此属性设置一个值时,它仍会抛出异常。现在,如何从get
调用中抛出异常后,如何为此属性设置值?
答案 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 方法。此建议不适用于索引器。索引器可以 由于参数无效而抛出异常