c#中try catch块中的疑问

本文关键字:catch try | 更新日期: 2023-09-27 18:16:05

问题是:

应用程序应该询问用户要预订的门票总数。当预订门票时,如果预订门票的总数超过可用门票,则应用程序应引发异常。我不知道为什么它没有显示一个错误,当我这样做,我想出了这个解决方案:

using System;    
namespace Ticket
{
    class blah
    {
        public void abc()
        {    
            int numberOfTickets;
            int numberOfAvailableTickets=10;
            int cost = 100;
            int pay;
            Console.WriteLine("how many tickets do you need");
            numberOfTickets = Convert.ToInt32(Console.ReadLine());
            try
            {
                if (numberOfTickets < numberOfAvailableTickets)
                {
                    pay = 100 * numberOfTickets;
                    Console.WriteLine("Pay please");
                    Console.WriteLine(pay);
                }                
            }                
            if( numberOfTickets>numberOfAvailableTickets)
            {                 
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
            }
        }
    }
}
 class Theater
 {
        static void Main(string[] args)
        {
            blah hi = new blah();
            hi.abc();
            Console.ReadLine();    
        }
  }
}

c#中try catch块中的疑问

我甚至不确定你所展示的代码是否可以编译…试试这个

using System;
namespace Ticket
{
    class blah
    {
        public void abc()
        {
            int numberOfTickets;
            int numberOfAvailableTickets=10;
            int cost = 100;
            int pay;
            Console.WriteLine("how many tickets do you need");
            numberOfTickets = Convert.ToInt32(Console.ReadLine());
            try
            {
            if( numberOfTickets>numberOfAvailableTickets)
                throw new Exception ("Not enough Tickets available!");

                    pay = 100 * numberOfTickets;
                    Console.WriteLine("Pay please");
                    Console.WriteLine(pay);
            }
            catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
        }
    }
}
    class Theater
    {
        static void Main(string[] args)
        {
            blah hi = new blah();
            hi.abc();
            Console.ReadLine();
        }
    }
}

如果输入的数字超过可用票,则throwException

必须使用throw来引发异常:

if( numberOfTickets>numberOfAvailableTickets)
     throw new Exception();

问题告诉您,如果预订的号码超过可用的号码,则抛出异常。

所以你不需要任何trycatch在abc(我真的希望这些名字不是在你的实际代码)。您还可以删除if (numberOfTickets < numberOfAvailableTickets)(但保留代码)。

上面的

:

pay = 100 * numberOfTickets;

移动:

if( numberOfTickets>numberOfAvailableTickets)
{

if内放:

throw new ArgumentException("numberOfTickets is greater than numberOfAvailableTickets");

如果需要,可以将ArgumentException更改为自定义异常

还请注意,如果您使用catch,它必须紧接在try或另一个catch之后。中间不能有if。参考文档

Main中,您可以捕获该异常,或者让它终止应用程序(从您提供的内容不清楚)。

问题是您没有显式抛出异常。除非你这样做,否则编译器不会发现你的代码有任何问题,因为默认情况下,它只会抛出实际影响程序运行状态的异常。

虽然这是一个"快速修复",所以说,只是添加一个throw new Exception();,你想要抛出的异常将工作。

然而,理想情况下,我建议为此目的创建一个自定义Exception类。但是前一行应该可以工作:)

我建议你去掉try &捕获并简单使用MessageBox

if (numberOfAvaiableTickets < numberOfTickets)
{
    MessageBox.Show("Number of tickets exceeded", "ErrorWindow");
}
else
{
     pay = 100 * numberOfTickets;
     Console.WriteLine("Pay please");
     Console.WriteLine(pay);
}