C#限制设定值
我目前正在尝试实现属性,特别是限制我的setter。例如,我有一个“Money”float字段,我想要它,这样你可以给它加/减值,但当它为0时,使它不能再减,但仍然可以加 我在下面的代码中看到,一旦“Money”达到0,它将始终停留在0。有没有办法检查setter是否被添加到?我知道你可以在AddMoney或SubtractMoney方法中检查它,但更奇怪的是,是否可以在setter中进行检查C#限制设定值,c#,math,properties,setter,limiting,C#,Math,Properties,Setter,Limiting,我目前正在尝试实现属性,特别是限制我的setter。例如,我有一个“Money”float字段,我想要它,这样你可以给它加/减值,但当它为0时,使它不能再减,但仍然可以加 我在下面的代码中看到,一旦“Money”达到0,它将始终停留在0。有没有办法检查setter是否被添加到?我知道你可以在AddMoney或SubtractMoney方法中检查它,但更奇怪的是,是否可以在setter中进行检查 public float Money { get { return this.
public float Money {
get {
return this._money;
}
set {
if (_money <= 0){
_money = 0;
} else {
_money = value;
}
}
}
尝试测试该值是否为负值。不要更改
货币值:
set {
if (value >= 0)
{
_money = value;
}
else
{
//You may throw exception, or log a warning
}
}
您可以检查值是否为负值…旁注:我强烈怀疑您的任务希望您将验证放在其他位置,而不是setter…永远不要将钱存储在浮动中。使用decimal@AlexeiLevenkov哦,把它放在设定器里是不好的做法吗?不,范围检查在设定器里是合理的。。。它会导致类似数字的值出现奇怪和非直观的行为(例如v=v-5+3
通常被认为等同于v=v-5;v=v+3;
,但这类属性并非如此)。但是,如果这是某种家庭作业,那么作业可能需要一些不同的内容,因为Susbstract(十进制数)
通常应该自己检查值,以保证预期的逻辑并抛出合理的错误。
set {
if (value >= 0)
{
_money = value;
}
else
{
//You may throw exception, or log a warning
}
}