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

