non ho bisogno di usare questo spesso, ma è possibile utilizzare la parola chiave checked:
int x = foo();
int test = checked(x * common);
si tradurrà in un'eccezione di runtime se overflow. Da MSDN:
In un contesto controllato, se un'espressione produce un valore che è fuori del campo del tipo di destinazione, il risultato dipende se l'espressione è costante e non costante. Le espressioni costanti causano errori di compilazione, mentre le espressioni non costanti vengono valutate in fase di esecuzione e generano eccezioni.
Vorrei anche sottolineare che c'è un altro C# parola chiave, unchecked
, che ovviamente fa il contrario di checked
e ignora overflow. Potresti chiederti quando useresti mai unchecked
dal momento che sembra essere il comportamento predefinito. Bene, c'è un'opzione del compilatore C# che definisce come vengono gestite le espressioni al di fuori di checked
e unchecked
: /checked. Puoi impostarlo nelle impostazioni di generazione avanzate del tuo progetto.
Se si dispone di molte espressioni da controllare, la cosa più semplice da fare sarebbe in realtà impostare l'opzione di creazione /checked
. Quindi qualsiasi espressione che trabocca, a meno che non sia stata completata in unchecked
, comporterebbe un'eccezione di runtime.
fonte
2010-06-02 04:34:26
modo migliore è quello di evitare in primo luogo –
Certo, ma questa è una domanda diversa da quella qui presentata.Gestirlo e prevenirlo sono discussioni separate (correlate ovviamente). –