【发布时间】:2020-07-14 11:23:31
【问题描述】:
我已经阅读了为什么我们需要抛出异常并重新抛出它。但是我对何时重新抛出异常感到困惑?我在将 throw 放入 CalculationOperationNotSupportedException catch 时添加了一个示例,之后,我将 Stack Trace 与 Rethrowing 和不 Rethrowing 进行了比较。这是相同的 99%,但是当您重新抛出异常时,它只会添加位置。 当然,如果你准确地进行了两次堆栈跟踪。第 35 行是“抛出”位置编号,第 28 行是 int result = calculator.Calculate(number1, number2, operation); 我认为这里没有重新抛出的 Stack Trace 更好。你怎么看?
Stack Trace without rethrowing(throw) 我评论了它。
在 ConsoleCalculator.Calculator.Calculate(Int32 number1, Int32 number2,字符串操作)中 C:\Users\Behnam\Desktop\c-sharp-error-handling-exceptions\06\demos\after\03UsingExceptions\ConsoleCalculator\Calculator.cs:line 25 在 ConsoleCalculator.Program.Main(String[] args) 中 C:\Users\Behnam\Desktop\c-sharp-error-handling-exceptions\06\demos\after\03UsingExceptions\ConsoleCalculator\Program.cs:line 28
在 catch 中重新抛出堆栈跟踪(CalculationOperationNotSupportedException ex)
在 C:\Users\Behnam\Desktop\c-sharp-error-handling-exceptions\06\demos\after\03UsingExceptions\ConsoleCalculator\Calculator 中的 ConsoleCalculator.Calculator.Calculate(Int32 number1, Int32 number2, String operation) .cs:第 25 行 在 C:\Users\Behnam\Desktop\c-sharp-error-handling-exceptions\06\demos\after\03UsingExceptions\ConsoleCalculator\Program.cs:line 35 中的 ConsoleCalculator.Program.Main(String[] args) p>
public int Calculate(int number1, int number2, string operation)
{
string nonNullOperation =
operation ?? throw new ArgumentNullException(nameof(operation));
if (nonNullOperation == "/")
{
try
{
return Divide(number1, number2);
}
catch (ArithmeticException ex)
{
throw new CalculationException("An error occurred during division", ex);
}
}
else
{
throw new CalculationOperationNotSupportedException(operation);
}
}
static void Main(string[] args)
{
var calculator = new Calculator();
int number1=1;
int number2=1;
string operation = "+";
try
{
int result = calculator.Calculate(number1, number2, operation);
DisplayResult(result);
}
catch (CalculationOperationNotSupportedException ex)
{
// Log.Error(ex);
WriteLine(ex);
throw;
}
}
【问题讨论】: