C#限制设定值

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.

我目前正在尝试实现属性,特别是限制我的setter。例如,我有一个“Money”float字段,我想要它,这样你可以给它加/减值,但当它为0时,使它不能再减,但仍然可以加

我在下面的代码中看到,一旦“Money”达到0,它将始终停留在0。有没有办法检查setter是否被添加到?我知道你可以在AddMoney或SubtractMoney方法中检查它,但更奇怪的是,是否可以在setter中进行检查

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