【问题标题】:C# Limiting setter valueC# 限制设置器值
【发布时间】:2017-03-26 07:19:26
【问题描述】:

我目前正在尝试实现属性,特别是限制我的设置器。例如,我有一个我想要的 'Money' 浮点字段,因此您可以向其添加/减去值,但是当它为 0 时,使其无法再减去,但仍可以添加到。

我在下面的代码中看到,一旦“Money”达到 0,它就会一直停留在 0。有没有办法检查 setter 是否被添加到?我知道您可以在 AddMoney 或 SubtractMoney 方法中检查它,但更好奇是否可以在 setter 中这样做。

public float Money {
    get {
        return this._money;
    }

    set {

        if (_money <= 0){
            _money = 0;
        } else {
            _money = value;
        }
    }
}

void AddMoney(float addAmount){
    Money += addAmount;
}

void SubtractMoney(float subtractAmount){
    Money -= subtractAmount;
}

【问题讨论】:

  • 您可以检查value是否为负...
  • 旁注:我强烈怀疑您的作业希望您将验证放到其他地方而不是 setter...
  • 永远永远永远永远永远永远不会将钱存入花车。使用小数
  • @AlexeiLevenkov 哦,把它放在 setter 中是不好的做法吗?
  • 不,范围检查在 setter 中是合理的......它会导致类似数字的值出现奇怪且不直观的行为(例如,v = v - 5 + 3 通常预计等同于 v = v -5; v = v + 3; 但它此类属性并非如此)。但同样,如果这是某种家庭作业,则作业可能需要一些不同的东西,因为Susbstract(decimal amount) 通常应该自行检查值以保证预期的逻辑并引发合理的错误。

标签: c# math properties setter limiting


【解决方案1】:

尝试测试该值是否为负不要更改Money 值:

        set {

                if (value >= 0)
                {
                    _money = value;
                }
                else
                {
                //You may throw exception, or log a warning   
                }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多