所以基本上我在这一个类上遇到了一些readonly
属性,该类的作者告诉我,我可以为特定任务设置可设置。问题是,它们在大多数时间通过操纵获得它们的价值,而不是直接来自类中的私有变量。
示例:
public decimal? AccruedInterest
{
get
{
if (this.Result != null)
{
return this.GetExchangedCurrencyValue(this.Result.AccruedInterest.GetValueOrDefault(decimal.Zero));
}
return null;
}
}
因此,如果我想添加一个setter,我不想担心设置Result
对象,因为我不确定它是否会退出它将被正确绘制。
我可以做这样的事吗?
private decimal? _AccruedInterest;
public decimal? AccruedInterest
{
get
{
if (this._AccruedInterest.HasValue)
{
return this._AccruedInterest.Value;
}
if (this.Result != null)
{
return this.GetExchangedCurrencyValue(this.Result.AccruedInterest.GetValueOrDefault(decimal.Zero));
}
return null;
}
set
{
this._AccruedInterest = value;
}
}
或者你们中有没有人看到可能产生的问题(除了它现在可以改变的事实)?
答案 0 :(得分:3)
你唯一的问题是,如果他们将值设置为null并且你希望你的属性返回null而不是评估if语句。
但是你可能不允许它们设置null,在这种情况下你应该在setter中添加一个检查。
set
{
if (value == null)
throw new NullArgumentException("AccruedInterest");
this._AccruedInterest = value;
}
如果它们设置为null有效,则可能需要另一个布尔标志来判断该值是否已设置。
private bool _accruedInterestSet;
private decimal? _accruedInterest;
public decimal? AccruedInterest
{
get
{
if (this._accruedInterestSet)
{
return this._accruedInterest; //don't return .Value in case they set null
}
if (this.Result != null)
{
return this.GetExchangedCurrencyValue(this.Result.AccruedInterest.GetValueOrDefault(decimal.Zero)) ;
}
return null;
}
set
{
this._accruedInterestSet = true;
this._AccruedInterest = value;
}
}
答案 1 :(得分:0)
我不知道它应该如何工作,但从语法上讲,我没有发现你的代码有任何问题。