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

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

二重変換の例外が発生していませんか?ConvertではなくDouble.TryConvertを使用する必要があります。

于 2012-12-05T14:40:33.380 に答える
0

入力したテキストをdoubleに変換できないようです。

をキャッチしてみてくださいInvalidCastException

于 2012-12-05T14:40:36.000 に答える