在抛出异常后将值设置为静态属性
本文关键字:静态 属性 设置 抛出异常 | 更新日期: 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可能抛出异常,请考虑将属性重新设计为方法。此建议不适用于索引器。索引器可以因无效参数引发异常