Так что вопрос:Как узнать значение переполнения без повторяющихся на время выполнения OverflowException
Учитывая нативный целочисленный тип, который представляет наибольшее возможное число в данном компилятором (? Языке), например ulong
в C#, как вы обнаруживаете, что входная строка, представляющая число, переполняет наибольшее значение, которое представляется этим типом, не возвращаясь к проверенному контексту и времени выполнения OveflowException
?
Очевидно, что C# компилятор может обнаружить постоянные интегральные перетоки:
ulong l = 18446744073709551615; //ok
ulong l = 18446744073709551616; //compile time error: Integral constant is too large.
является составителем с помощью выполнения OverflowException
(или эквивалент) под капотом? Если да, существует ли способ сделать это без повторения исключения времени выполнения или создания числового типа, который может содержать большие числа, такие как System.Numeric.BigInt
? Стоит отметить, что BigInt
не имеет встроенной поддержки в C#, как следующее сообщение об ошибке во время компиляции, хотя интегральная постоянная хорошо внутри диапазона типа по:
BigInt i = 18446744073709551616; //compile time error: Integral constant is too large.
Заключительное исключение, например 'TryParse', также считается no-no? –
Вы можете взглянуть на ['UInt64.TryParse'] (http://referencesource.microsoft.com/#mscorlib/system/number.cs), в пути нет' try-catch'. Однако я не знаю, как использует компилятор. –
@InBetween: «Если я не ошибаюсь, TryParse просто обертывает Parse, который генерирует исключение во время выполнения». Нет. Это исключение. В этом-то и дело. – spender