Warum gibt diese Methode double.PositiveInfinity nicht DivideByZeroException zurück?
Ich habe das folgende Snippet im interaktiven VS2015-C # ausgeführt und ein sehr seltsames Verhalten festgestellt.
> 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.
>
Warum hat die Methode unendlich zurückgegeben, während 3/0 einen Fehler und 3 / b einen formatierten Fehler ausgelöst haben? Kann ich die Division zwingen, einen Fehler auszulösen, anstatt unendlich zurückzugeben?
Wenn ich die Methode neu formatiere, um
double divide(double a, double b)
{
if ( b == 0 )
{
throw new ArgumentException("Argument b must be non zero.", new DivideByZeroException());
}
return a / b;
}
Würde die neue DivideByZeroException die gleichen Informationen und Strukturen enthalten wie die gefangene Ausnahme?