try-catch 块中的 if 语句 returns "Infinite"

if-statement inside a try-catch block returns "Infinite"

首先,我是编程新手,刚刚完成有关 C# 的 SoloLearn 课程。 我确实理解 try-catch 块的核心原理,但我不知道如何在我的代码中正确实现它(代码如下所示)。

class Program
{
    static void Main(string[] args)
    {   //create object of Class Calculator
        Calculator calc = new Calculator();

        //take user input and store in num1 and print it to screen
        try{
            double num1 = Convert.ToInt32(Console.ReadLine());
            Console.Write("\nnumber1: " + num1);
            double num2 = Convert.ToInt32(Console.ReadLine());
            Console.Write("\nnumber2: " + num2);
        
            //take operator as input and print it to screen
            string operand = Console.ReadLine();
            Console.Write("\noperator: " + operand);

            //check if operator from user input is equal to one of the 4 calculation methods in Calculator Class
            Console.Write("\nresult: ");
            if(operand == "+"){
            Console.WriteLine(calc.Addition(num1, num2));
            }
            else if(operand == "-"){
            Console.WriteLine(calc.Subtraction(num1, num2));
            }
            else if(operand == "*"){
            Console.WriteLine(calc.Multiplication(num1, num2));
            }
            else{
            Console.WriteLine(calc.Division(num1, num2));
            }
        }
        catch(DivideByZeroException){
            Console.WriteLine("can't divide by zero");
        }
        catch(Exception e){
            Console.WriteLine("An error occurred. Only integers are allowed!");
        } 
    }
}//class Calculator with methods for 4 simple calculations
class Calculator{
    private double number1;
    private double number2;
    private double res;

    public double Addition(double num1, double num2){
        this.number1 = num1;
        this.number2 = num2;
        this.res = num1 + num2;
        return res;
    }
    public double Subtraction(double num1, double num2){
        this.number1 = num1;
        this.number2 = num2;
        this.res = num1 - num2;
        return res;
    }
    public double Multiplication(double num1, double num2){
        this.number1 = num1;
        this.number2 = num2;
        this.res = num1 * num2;
        return res;
    }
    public double Division(double num1, double num2){
        this.number1 = num1;
        this.number2 = num2;
        this.res = num1 / num2;
        return res;
    }
}

所以我希望我的简单计算器能够处理异常“DivideByZero”和“Exception e”-> 如果输入不是整数。

当我使用示例输入 4/0 测试 DivideByZero 异常时,程序 returns“无限”作为结果而不是 catch 块中的代码。

我猜“无限”结果来自 try-catch 块中的 if 语句,但我不确定。

我搜索了多个站点、Whosebug 上的类似帖子并阅读了有关 try-catch 块的 c# 的 Microsoft 文档,但我就是想不通。

抱歉,如果我的代码示例太大,但我认为这是理解我的代码混乱的最佳方式。

提前感谢您的快速回复!

你的try catch没有问题。如果将 double 除以零,则不会出现异常。你得到 Double.PositiveInfinity 作为你的案例的结果。 DivideByZeroException 仅针对整数或小数数据类型抛出。

更改片段

 else {
   Console.WriteLine(calc.Division(num1, num2));
 }

进入

 else {
  Console.WriteLine(num2 != 0 
     ? $"{calc.Division(num1, num2)}" 
     :  "can't divide by zero");
}

因为浮点数除法不会抛出异常但是returnsNaN,PositiveInfinityNegativeInfinity:

 0.0 / 0.0 == double.NaN
 1.0 / 0.0 == double.PositiveInifinity
-1.0 / 0.0 == double.NegativeInfinity