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

C#账户程序输出异常显示System.Action`1[System.Int32],求排查解决

C#账户程序输出异常问题排查与解决

问题根源

你遇到的输出异常Balance after Deposit:System.Action1[System.Int32]和Withdrawn :System.Action1[System.Int32],以及余额未更新的问题,核心原因有几个:

  • 错误拼接方法引用:ShowInfo里直接把Deposit、Withdraw方法名拼接到输出里,而不是执行方法后显示余额,所以输出的是方法的类型信息。
  • 未执行存提款操作:Main函数里读取了存提款金额,但根本没调用账户对象的Deposit和Withdraw方法,余额自然不会变。
  • 提现逻辑错误:Withdraw方法里的判断条件写反了,初始余额不可能小于0,应该先检查提现金额是否合法,再判断余额是否足够。
  • 冗余代码:Main里调用a1.getAccName();这类方法却不接收返回值,完全没用。

修正后的完整代码

using System;

class Account
{
    string accName;
    string acid;
    int balance;

    public Account() { }
    public Account(string accName, string acid, int balance)
    {
        this.accName = accName;
        this.acid = acid;
        this.balance = balance;
    }

    public void setAccName(string accName) { this.accName = accName; }
    public void setAcid(string acid) { this.acid = acid; }
    public void setBalance(int balance) { this.balance = balance; }   

    public string getAccName() { return accName; }
    public string getAcid() { return acid; }   
    public int getBalance() { return balance; }
    
    public void Deposit(int amount)
    {
        if (amount > 0) 
        {
            balance += amount;
            Console.WriteLine($"成功存入 {amount} 元");
        }  
        else
        {
            Console.WriteLine("存入金额必须大于0");
        }
    }

    public void Withdraw(int amount)
    {
        if (amount <= 0)
        {
            Console.WriteLine("提现金额必须大于0");
        }
        else if (amount > balance)
        {
            Console.WriteLine("余额不足,无法提现");
        }
        else
        { 
            balance -= amount;
            Console.WriteLine($"成功提现 {amount} 元");
        }
    }

    public void ShowInfo() 
    {
        Console.WriteLine("账户信息.......");
        Console.WriteLine($"账户名称: {accName}");
        Console.WriteLine($"账户ID: {acid}");
        Console.WriteLine($"当前账户余额: {balance}");
    }

    static void Main(string[] args)
    {
        Console.WriteLine("账户信息录入.....");

        Console.WriteLine("请输入账户名称:");
        string accName = Console.ReadLine();
        Console.WriteLine("请输入账户ID:");
        string accID = Console.ReadLine();
        Console.WriteLine("请输入初始余额:");
        int balance = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("请输入存入金额:");
        int depositAmount = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("请输入提现金额:");
        int withdrawAmount = Convert.ToInt32(Console.ReadLine());

        // 直接用带参构造函数初始化账户,替代多个set方法
        Account a1 = new Account(accName, accID, balance);
        
        // 执行存、提款操作,更新余额
        a1.Deposit(depositAmount);
        a1.Withdraw(withdrawAmount);
        
        // 显示最终账户状态
        a1.ShowInfo();
    }
}

关键修改说明

  1. 移除错误的方法引用输出:删掉ShowInfo里拼接Deposit、Withdraw的代码,直接显示当前余额——因为存提款操作已经修改了余额,不需要额外显示方法信息。
  2. 执行存提款操作:在Main里添加a1.Deposit(depositAmount)和a1.Withdraw(withdrawAmount),确保余额被更新。
  3. 修复提现逻辑:调整Withdraw的判断顺序,先检查提现金额是否大于0,再判断是否超过余额,逻辑更合理。
  4. 规范变量命名:把Main里的Deposit、Witdraw改成depositAmount、withdrawAmount,避免和方法名重名,符合C#命名习惯。
  5. 简化对象初始化:用带参数的构造函数创建账户对象,替代多次调用set方法,代码更简洁。
  6. 添加操作反馈:存提款成功时增加提示信息,让用户清楚操作结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:37:50