2011-02-02 13 views
15

Stavo lavorando con C# e ho notato che quando avevo un numero intero molto grande tentavo di ingrandirlo. Piuttosto che lanciando qualche tipo di errore di overflow, è sufficiente impostare il numero sul valore più basso possibile (-2,147,483,648), credo.C# Overflow non funziona? Come abilitare il controllo di overflow?

Mi chiedevo se c'era un modo per abilitare il controllo di overflow in Visual Studio?

risposta

30

È possibile utilizzare le seguenti operazioni per abilitare aritmetico di overflow/underflow check-in Visual Studio:

  1. Fare clic destro sul progetto in Solution Explorer e selezionare Proprietà.
  2. Nella scheda Costruisci, fare clic sul pulsante Avanzate. (Verso il fondo)
  3. Selezionare la casella di controllo "Verifica aritmetica di overflow/underflow".

Questo lancerà una System.OverflowException quando si verifica l'overflow piuttosto che è solita operazione di cambiare il valore a un valore minimo.

senza overflow aritmetico/underflow abilitato:

int test = int.MaxValue; 
test++; 
//Test should now be equal to -2,147,483,648 (int.MinValue) 

Con overflow aritmetico/underflow abilitato:

int test = int.MaxValue; 
test++; 
//System.OverflowException thrown 

utilizzo di un blocco controllato:

checked 
{ 
    int test = int.MaxValue; 
    test++; 
    //System.OverflowException thrown 
} 

La documentazione per il controllo è disponibile here. (Grazie a Sasha per avermelo ricordato.)

+12

È anche possibile utilizzare la parola chiave 'checked' per racchiudere un'istruzione o un set di istruzioni in modo che siano esplicitamente controllate per l'overflow aritmetico. Impostare la proprietà a livello di progetto è un po 'rischioso perché spesso l'overflow è un'aspettativa abbastanza ragionevole. –

+2

Si noti che questa opzione del compilatore si applica solo quando non è presente un contesto esplicito 'checked' o' unchecked' nel codice. Inoltre, influenzerà l'eseguibile risultante, non solo il debugging in Visual Studio. Vedi qui per la documentazione: http://msdn.microsoft.com/en-us/library/h25wtyxf%28v=VS.100%29.aspx – Justin

+0

@Rionmonster e @Sasha - Non sapevo di nessuna di queste due funzionalità . Grazie ad entrambi. –