我应该在哪里放置 try catch 块? (简单除法)

Posted

技术标签:

【中文标题】我应该在哪里放置 try catch 块? (简单除法)【英文标题】:Where i should place try catch block? (Simple division method) 【发布时间】:2021-01-27 19:29:54 【问题描述】:

这是我的代码:

 using System;

 using System.Data;

 using System.Transactions;

 namespace BasicCourse.Exceptions 
 

    class Program
    
   
       static void Main(string[] args)
       
       
       Division();

       Console.ReadKey();
       

      static void Division()
      
        Console.Write("Enter a first number: ");
        int firstEnteredNumber = int.Parse(Console.ReadLine());

        Console.Write("Enter a second number: ");
        int secondEnteredNumber = int.Parse(Console.ReadLine());

        float quotient = (float) firstEnteredNumber / secondEnteredNumber;

        Console.WriteLine("Result of division: " + quotient + "\n");
      

我正在学习 C# 中的异常。我想参加除以零异常,但我不知道应该在哪里放置 try catch 块。在 Main 方法中:

try 
 
    Division() 
 
catch (DivideByZeroException ex)
 etc...? 

还是在Division 方法内?

【问题讨论】:

在这种情况下,我不会使用 try/catch,而是在进行除法之前检查 secondEnteredNumber 是否为零。 在main里面,原因是应该由调用者负责处理异常,在这种情况下调用者是Main 当用户输入 0 作为第二个数字时,您希望发生什么? ericlippert.com/2008/09/10/vexing-exceptions 【参考方案1】:

更新 --- 对不起! 我看了别人的回答,发现float不会抛出任何异常!很抱歉我忘记了。

DivideByZeroException Class 尝试将 整数小数 值除以零时引发的异常。

控制台显示:

除法结果:∞

事实上,我们不想要这种类型的结果,所以我编辑了答案。


所以我们知道结果是:没有抛出异常。 如果您希望方法 Division() 提醒用户他们正在尝试除以 0,您可以检查该值。

      static void Division()
      
        Console.Write("Enter a first number: ");
        int firstEnteredNumber = int.Parse(Console.ReadLine());

        Console.Write("Enter a second number: ");
        int secondEnteredNumber = int.Parse(Console.ReadLine());

        //Added
        if (secondEnteredNumber == 0)
        
            Console.WriteLine("cannot divide by 0");
        
        else
        
            float quotient = (float) firstEnteredNumber / secondEnteredNumber;
            Console.WriteLine("Result of division: " + quotient + "\n");
        
      

【讨论】:

【参考方案2】:
        static void Main(string[] args)
    
        try
        
            Division();
        
        catch (Exception e)
        
            Console.WriteLine(e);
            throw;
        


        Console.ReadKey();
    

除以零不会导致异常。您必须输入一些逻辑来处理它。

            if (float.IsNaN(quotient))
        
            //dostuff
        

【讨论】:

以上是关于我应该在哪里放置 try catch 块? (简单除法)的主要内容,如果未能解决你的问题,请参考以下文章

调试“WCF 服务库”时在哪里可以设置 try-catch 块(即入口点/Main() 方法在哪里)

Sql语法高级应用之六:如何在Sql语句中如何使用TRY...CATCH

C#中如何处理异常?怎么使用try-catch语句?

Java——异常

JAVA异常处理机制

java学习------异常