gpt4 book ai didi

c# - 使只读属性可设置

转载 作者:行者123 更新时间:2023-11-30 12:15:10 26 4
gpt4 key购买 nike

所以基本上我在这个类上遇到了一些 readonly 属性,该类的作者告诉我,我可以为特定任务设置这些属性。问题是,它们大部分时间都是通过操作来获取值的,而不是直接从类中的私有(private)变量中获取。

例子:

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;
}
}

或者你们中有人看到可能由此产生的问题(除了它现在可以更改的事实之外)吗?

最佳答案

那么你唯一的问题是如果他们将值设置为 null 而你希望你的属性返回 null 而不是评估 if 语句。

但是你可能不允许他们设置为 null,在这种情况下你应该在 setter 中添加一个检查。

set 
{
if (value == null)
throw new NullArgumentException("AccruedInterest");
this._AccruedInterest = value;
}

如果他们设置 null 是有效的,您可能需要另一个 bool 标志来判断该值是否已设置。

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;
}
}

关于c# - 使只读属性可设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com