0

Есть ли встроенный способ получить максимальное значение при арифметическом переполнении?Получить максимальное значение при арифметическом переполнении

Вот что мне нужно:

var val = byte.MaxValue + 1; 

//should be rounded down to byte.MaxValue 
MyByteProperty = val; 

P.S. Я знаю, что могу сделать это, обернув его как выражение checked как Alex answered, мой вопрос в том, есть ли встроенный способ на языке или BCL.

+0

Я думаю, что вы ищете то, что называется «насыщенными добавить». – Cameron

+1

То, что вы ищете, называется * арифметикой насыщения *, и является афайком недоступным для встроенных типов и операторов, потому что это противоречило бы тому, как программисты ожидают, что они будут вести себя. –

ответ

0

Есть checked и unchecked ключевые слова, которые указывают, будут ли брошено исключение, если переполнение: встречается,

try 
{ 
    MyByteProperty = checked(byte.MaxValue + 1); 
} 
catch (System.OverflowException e) 
{ 
    MyByteProperty = byte.MaxValue; 
} 
+1

Я знаю об этом. Мой вопрос был, если есть встроенный способ для этого. – Shimmy

+0

Не достаточно ли этого встроенного устройства? –

+1

@PatrickHofman Для этого, эта конструкция, возможно, намного более многословна, чем, например, 'MyByteProperty = val> byte.MaxValue? byte.MaxValue: val', но даже если вы должны вручную наложить каждое присваивание/вычисление, а не что-то встроенное (чего, я считаю, не существует). – GSerg