首先在这里发帖,很抱歉,如果我有一些错误的细节。我正在尝试捕获用户输入无效(不存在)员工的异常。我尝试了很多不同的变体,但错误从未引发过。相反,代码只是终止,在这种情况下,它将在以下行后退出:
MyPostSalary = Convert.ToDouble(Console.ReadLine());
Console.WriteLine();
谁能看到我做错了什么?
完整代码:
Console.Write("Employee ID: ");
myEID = Console.ReadLine();
try
{
Console.Write("Post ID: ");
myPID = Console.ReadLine();
if ((myEmployees[myEID] is MonthlyPaidEmployee) || (myEmployees[myEID] isWeeklyPaidEmployee))
{
Console.Write("Post Name: ");
MyPostName = Console.ReadLine();
Console.Write("Post Start Date: ");
MyPostStartDate = Convert.ToDateTime(Console.ReadLine());
Console.Write("Post End Date: ");
MyPostEndDate = Convert.ToDateTime(Console.ReadLine());
Console.Write("Post Salary: ");
MyPostSalary = Convert.ToDouble(Console.ReadLine());
Console.WriteLine();
myPost = new Post(myPID, MyPostName, MyPostStartDate, MyPostEndDate, MyPostSalary);
if (myEmployees[myEID] is MonthlyPaidEmployee)
{
myMonthlyEmp = (MonthlyPaidEmployee)myEmployees[myEID];
myMonthlyEmp.PostHistory.Add(myPID, myPost);
}
if (myEmployees[myEID] is WeeklyPaidEmployee)
{
myWeeklyEmp = (WeeklyPaidEmployee)myEmployees[myEID];
myWeeklyEmp.WeeklyPaidEmployeePostHistory.Add(myPID, myPost);
}
}
}
catch (NullReferenceException ex)
{
Console.WriteLine("Employee ID does not exist.");
Console.WriteLine(ex.Message);
Console.WriteLine();
Console.WriteLine("Press any key to continue");
Console.ReadLine();
}
答案 0 :(得分:3)
您只捕获NullReferenceException异常,但正如您在Convert.ToDouble()的方法说明中所看到的那样,它会抛出 InvalidCastException 。
请改为尝试catch (InvalidCastException ex)
。
另请注意FormatException
和OverflowException
。
答案 1 :(得分:1)
很明显,你不得到NullReferenceException。我建议您尝试以下操作:
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.WriteLine();
Console.WriteLine("Press any key to continue");
Console.ReadLine();
}
找出您正在接收的异常,并捕获特定的异常,否则首先阻止它发生。
你应该从不捕获NullReferenceException。
答案 2 :(得分:0)
您是否收到双转换异常?您应该使用Double.TryConvert而不是Convert。
答案 3 :(得分:0)
看起来输入的文字无法转换为双倍。
尝试捕获InvalidCastException
。
答案 4 :(得分:0)
您是否在Visual Studio(或您的IDE)上进行调试? 如果是,可能是您正在捕获异常,但IDE设置为在异常引发时显示警告消息... 尝试在IDE外运行您的应用程序,如果它可以工作,您可以在NullReferenceExceptions引发时禁用警告,但这是非常危险的。为此,请查找"例外设置"在Visual Studio中(或类似的东西,我不确定,因为我使用意大利语版本)。