Nie potrzeba używać tego często, ale można użyć checked kluczowe:
int x = foo();
int test = checked(x * common);
spowoduje wyjątek czasu wykonywania, jeśli przepełnienia. Od MSDN:
W sprawdzonej kontekście, jeśli wyrażenie tworzy wartość, która jest spoza zakresu typu docelowego, wynik zależy od czy wyrażenie jest stała lub nie stała. Stałe wyrażeń powodują błędy czasu kompilacji, a nieciągłe wyrażenia są oceniane w czasie wykonywania i powodują wyjątki.
I należy również podkreślić, że istnieje inny # kluczowe C unchecked
, co oczywiście czyni przeciwieństwem checked
i ignoruje przepełnienia. Możesz się zastanawiać, kiedy użyjesz unchecked
, ponieważ wydaje się, że jest to domyślne zachowanie. Cóż, istnieje opcja kompilatora C#, która definiuje sposób obsługi wyrażeń spoza checked
i unchecked
: /checked. Możesz ustawić go w zaawansowanych ustawieniach kompilacji projektu.
Jeśli masz dużo wyrażeń, które wymagają sprawdzenia, najprościej byłoby ustawić opcję kompilacji /checked
. Następnie każde wyrażenie, które się przepełni, o ile nie zostanie zapakowane w unchecked
, spowoduje wyjątek środowiska wykonawczego.
najlepszym sposobem jest, aby zapobiec w pierwszej kolejności –
pewno, ale to już inna kwestia od prezentowanej tutaj.Obchodzenie się z nim i zapobieganie mu to oddzielne (związane oczywiście z) dyskusje. –