我应该在哪里放置 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() 方法在哪里)