我在VS2015 C#交互式代碼中運行了以下代碼片段,並且出現了一些非常奇怪的行爲。爲什麼此方法返回double.PositiveInfinity而不是DivideByZeroException?
> double divide(double a, double b)
. {
. try
. {
. return a/b;
. }
. catch (DivideByZeroException exception)
. {
. throw new ArgumentException("Argument b must be non zero.", exception);
. }
. }
> divide(3,0)
Infinity
> 3/0
(1,1): error CS0020: Division by constant zero
> var b = 0;
> 3/b
Attempted to divide by zero.
>
爲什麼該方法返回無窮大,而3/0拋出一個錯誤,3/b拋出一個格式化錯誤?我可以強制該師發出錯誤而不是返回無限嗎?
如果我重新格式化方法
double divide(double a, double b)
{
if (b == 0)
{
throw new ArgumentException("Argument b must be non zero.", new DivideByZeroException());
}
return a/b;
}
將在新DivideByZeroException包含所有相同的信息和結構捕捉到的異常會嗎?
這個問題不是關於java的 – pquest
我的不好!儘管它也適用於C#。 – codemonger
@codemonger在數學上,N/0不等於無窮大。即使考慮到浮點數支持+/- +/- Infinity值,拋出異常比返回任何值更有意義。 NaN比無限更合適。 –