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

如何在对象列表中定位指定账户并实现银行存款功能

解决存款总是存入第一个银行账户的问题

看起来你遇到的核心问题是没有正确定位到客户的目标账户实例,反而每次都新建了无关的账户对象,还错误地用余额当作索引去获取账户,这才导致存款总是跑到第一个账户去。咱们一步步拆解问题,然后给出修复方案:

问题代码的核心错误

  1. 调用端错误:新建了无关的账户对象
    你在点击存款时,代码里new SavingsAccount()创建了一个全新的储蓄账户,这个账户和当前选中客户的账户列表没有任何关系,完全是个独立的对象。

  2. DepositMoney方法逻辑完全错误
    方法里又new SavingsAccount()了一次,然后用savingsaccount.Balance(新对象的余额默认是0)作为索引去取客户的账户列表,这就相当于每次都取validCustomer.myBankAccount[0],自然总是存到第一个账户里。而且你最后把修改后的对象再赋值回列表的对应索引,这完全是多余的操作。

修复后的代码实现

第一步:修改调用端代码,定位到客户的目标账户

我们不需要新建账户,而是从选中客户的账户列表里找到对应类型的账户实例:

validCustomer = (Customer)lstBankKunder.SelectedItem;
if (radioButtonSaving.IsChecked == true)
{
    // 从客户的账户列表中筛选出储蓄账户
    var targetAccount = validCustomer.myBankAccount.OfType<SavingsAccount>().FirstOrDefault();
    if (targetAccount != null)
    {
        // 直接调用该账户的存款方法
        targetAccount.DepositMoney(299);
        // 刷新账户列表显示
        lstKonton.ItemsSource = null;
        lstKonton.ItemsSource = validCustomer.myBankAccount;
    }
    else
    {
        // 处理客户没有该类型账户的情况,比如弹窗提示
        MessageBox.Show("该客户没有储蓄账户");
    }
}

第二步:简化DepositMoney方法逻辑

因为我们已经拿到了客户的目标账户实例,所以方法里不需要再传Customer参数,直接修改当前实例的余额即可:

// 假设你的SavingsAccount继承自一个BankAccount基类,基类里有Balance属性
public override void DepositMoney(int money)
{
    this.Balance += money; // 直接修改当前账户的余额,无需额外操作
}

额外优化建议

  • 如果客户可能拥有多个同类型账户(比如多个储蓄账户),那仅靠单选按钮区分类型就不够了,建议让用户直接从账户列表中选中具体要存款的账户,这样更准确。
  • 给所有账户类定义一个统一的基类(比如BankAccount),包含通用的属性(如Balance)和方法(如DepositMoney、WithdrawMoney),这样myBankAccount可以定义为List<BankAccount>,便于统一管理和操作。
  • 可以给每个账户添加一个AccountName或AccountType属性,方便在界面上显示区分不同账户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:39:17