1

第一次在这里发帖,如果我的一些细节有误,非常抱歉。我试图捕捉用户输入无效(不存在)员工的异常。我尝试了许多不同的变体,但从未引发错误。相反,代码只是终止,在这种情况下,它将在以下行之后退出:

 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();

        }
4

5 回答 5

5

您是否在 Visual Studio(或您的 IDE)上进行调试?如果是,则可能您正在捕获异常,但 IDE 设置为在引发异常时显示警告消息...尝试在 IDE 之外运行您的应用程序,如果它有效,您可以在 NullReferenceExceptions raise 时禁用警告,但它是相当危险。为此,请在 Visual Studio 中查找“异常设置”(或类似的东西,我不确定,因为我使用的是意大利语版本)。

于 2017-03-31T13:05:01.213 回答
3

您只捕获 NullReferenceException 异常,但正如您在Convert.ToDouble()的方法描述中看到的那样,它会引发InvalidCastException

所以试试吧catch (InvalidCastException ex)

还要注意FormatExceptionOverflowException

于 2012-12-05T14:43:18.723 回答
1

很明显,您没有收到 NullReferenceException。我建议您尝试以下方法:

catch (Exception ex)
{
        Console.WriteLine(ex.ToString());
        Console.WriteLine();
        Console.WriteLine("Press any key to continue");
        Console.ReadLine();        
}

找出您收到的异常,然后捕获该特定异常,或者从一开始就阻止它发生。

永远不应该捕获 NullReferenceException。

于 2012-12-05T16:25:04.027 回答
0

你没有得到双重转换例外吗?您可能应该使用 Double.TryConvert 而不是 Convert。

于 2012-12-05T14:40:33.380 回答
0

看起来输入的文本无法转换为双精度。

尝试捕捉一个InvalidCastException.

于 2012-12-05T14:40:36.000 回答