mscorlib中出现未处理的异常

本文关键字:异常 未处理 mscorlib | 更新日期: 2023-09-27 18:21:33

发现WCF并因此开始探索它。这是一个C#控制台应用程序。代码运行良好,除非我尝试撤回。如果我输入了错误类型的数量,它会检测(捕获),通知我输入无效,并将我发送回菜单提示。这很好,很好,直到我尝试提取比我现有(平衡)更多的dosh。据推测,我应该收到一条信息,说我资金短缺,无法提取这么多钱。相反,我得到了这个:

mscorlib.dll 中发生"System.FormatException"类型的未处理异常

我哪里错了?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace BankAccountClient
{
    class Program
    {
        static void Main(string[] args)
        {
            BankAccountClient.ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient();
            bool done = false;
            do
            {
                Console.WriteLine("Select one of the following:");
                Console.WriteLine("'t1 -- Withdraw");
                Console.WriteLine("'t2 -- Deposit");
                Console.WriteLine("'t3 -- Balance");
                Console.Write("Enter Your selection (0 to exit): ");
                string strSelection = Console.ReadLine();
                int iSel;
                try
                {
                    iSel = int.Parse(strSelection);
                }
                catch (FormatException)
                {
                    Console.WriteLine("'r'nWhat?'r'n");
                    continue;
                }
                Console.WriteLine("'nYou selected  " + iSel + "'n");
                switch (iSel)
                {
                    case 0:
                        done = true;
                        break;
                    case 1:
                        int balance = client.Balance();
                        int amount;
                        //WCF Withdraw
                        Console.Write("How much would you like to withdraw?: ");
                        try
                        {
                            amount = int.Parse(Console.ReadLine());
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("'r'nInvalid input. Must be an integer'r'n");
                            continue;
                        }
                        if (amount > balance)
                        {
                            Console.WriteLine(String.Format("'r'nNot enough funds to withdraw ${0}'r'n"), amount);
                            continue;
                        }
                        else
                            client.Withdraw(amount);
                        Console.WriteLine(String.Format("'nCurrent balance is ${0}'n", client.Balance()));
                        break;
                    case 2:
                        //WCF Deposit
                        Console.WriteLine("Deposit();");
                        break;
                    case 3:
                        //WCF Balance
                        Console.WriteLine(String.Format("Current balance is ${0}", client.Balance()));
                        break;
                    default:
                        Console.WriteLine("You selected an invalid number: {0}'r'n", iSel);
                        continue;
                }
                Console.WriteLine();
            } while (!done);
            Console.WriteLine("'nGoodbye!");
        }
    }
}

WCF服务(短)

public class Service : IService
{
    private static int balance;
    public void Withdraw(int value)
    {
        balance -= value;
    }
    public void Deposit(int value)
    {
        balance += value;
    }
    public int Balance()
    {
        return balance;
    }
}

mscorlib中出现未处理的异常

您需要将金额移动到此行上的String.Format方法中

Console.WriteLine(String.Format("'r'nNot enough funds to withdraw ${0}'r'n"), amount);

所以

Console.WriteLine(String.Format("'r'nNot enough funds to withdraw ${0}'r'n", amount));

您把括号放错了地方。将您的输出更改为:

Console.WriteLine(String.Format("'r'nNot enough funds to withdraw {0}'r'n", amount));