You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改属性值的前提下检测C#对象属性是否小于0?

CheckingAccount Withdraw方法问题修复方案

问题根源

原代码的if ((Balance -= withdrawAmount) < 0)中,Balance -= withdrawAmount是赋值操作,会直接修改Balance的实际存储值,而非仅做逻辑判断。哪怕后续进入返回false的分支,已经被修改的余额也不会自动回滚,这就是测试后余额变成-200的核心原因。

修复后的代码

public class CheckingAccount : AccountBase
{
    public override bool Withdraw(float withdrawAmount)
    {
        // 先计算扣除后的预期余额,不修改实际Balance
        float expectedBalance = Balance - withdrawAmount;
        if (expectedBalance < 0)
        {
            return false;
        }
        // 确认余额足够,再执行扣除操作
        Balance = expectedBalance;
        return true;
    }
}

测试验证

使用你提供的测试代码:

CheckingAccount cAccount = new CheckingAccount();
cAccount.Deposit(300);
cAccount.Withdraw(500);
Console.WriteLine(cAccount.Balance.ToString());

此时输出应为300,因为取款金额超过余额,方法返回false,Balance未被修改。

额外优化建议

  • 增加对取款金额的合法性校验,避免负数取款:
    if (withdrawAmount <= 0)
    {
        return false;
    }
    
  • 金融场景建议使用decimal类型替代float,避免浮点数精度误差。

内容的提问来源于stack exchange,提问作者wargwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:15:40