T.CreateChecked не бросается при переполненииC#

Место общения программистов C#
Ответить
Anonymous
 T.CreateChecked не бросается при переполнении

Сообщение Anonymous »

Я пытаюсь проверить на наличие переполнения общим методом, используя t.genericChecked < /code>.

Но поведение t.genericChecked < /code> смущает меня, он не бросает Даже когда я ожидал, что это бросится.

Код: Выделить всё

// Example 1: Throws as expected
short a = 32767;
short b = 32767;

short.CreateChecked(a + b); // 
// Example 2: Does not throw, even though it overflows
short a = 32767;
short b = 32767;

short result = GenericChecked(a, b);

T GenericChecked(T a, T b) where T : INumber
{
return T.CreateChecked(a + b); // Does not throw, returns -2 instead.
}
< /code>
Даже добавление максимальных значений не бросает < /p>
 _ = GenericChecked(a, b);

T GenericChecked(T a, T b) where T : INumber, IMinMaxValue
{
return T.CreateChecked(T.MaxValue + T.MaxValue);
}
Разве t.createchecked (a + b) то же самое, что и Short.createChecked (a + b) В этом случае?

Почему это не бросает перепроблема при выполнении той же арифметической операции? Протестировано с .net 9


Подробнее здесь: https://stackoverflow.com/questions/793 ... verflowing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»