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();
}
}
}
我甚至不确定你所展示的代码是否可以编译…试试这个
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();
}
}
}
如果输入的数字超过可用票,则throw
和Exception
…
必须使用throw来引发异常:
if( numberOfTickets>numberOfAvailableTickets)
throw new Exception();
问题告诉您,如果预订的号码超过可用的号码,则抛出异常。
所以你不需要任何try
或catch
在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);
}