Quando è necessario utilizzare l'operatore checked
in C#?
È adatto solo per la gestione delle eccezioni?Quando è necessario utilizzare l'operatore controllato in C#?
risposta
Si potrebbe utilizzare checked
in guardia contro un (silenzioso) di overflow in un'espressione.
E utilizzare unchecked
quando si sa che potrebbe verificarsi un trabocco innocuo.
Si utilizzano entrambi in luoghi in cui non si desidera fare affidamento sull'impostazione predefinita del compilatore (a livello di progetto).
Entrambe le forme sono piuttosto rare, ma quando si esegue l'aritmetica di interi critici vale la pena di pensare a un possibile overflow.
Si noti inoltre che sono disponibili in due forme:
x = unchecked(x + 1); // (expression)
unchecked { x = x + 1;} // { statement(s) }
Da The checked and unchecked operators
Il controllati ed incontrollati operatori vengono utilizzati per controllare il controllo di overflow contesto per integrale tipo operazioni aritmetiche e conversioni.
In un contesto controllato, se un'espressione produce un valore che è al di fuori della gamma del tipo di destinazione, il risultato dipende se l'espressione è costante o non costante. Le espressioni costanti causano errori di compilazione, mentre le espressioni non costanti vengono valutate in fase di esecuzione e generano eccezioni.
In un contesto incontrollato, se un espressione produce un valore che è fuori del campo del tipo di destinazione , il risultato viene troncato.
checked
vi aiuterà a prendere System.OverFlowException
che passerà inosservato altrimenti
int result = checked (1000000 * 10000000);
// Error: operation > overflows at compile time
int result = unchecked (1000000 * 10000000);
// No problems, compiles fine
checked
vs. unchecked
è utile anche nel quelle volte in cui stai facendo matematica intera. in particolare le operazioni di incremento e si sa che si andrà ad incrementare oltre UInt32.MaxValue
, e si desidera che l'overflow sia innocuo a 0
.
- 1. Quando è necessario utilizzare System.AppContext?
- 2. Quando è necessario utilizzare _.bindAll() in Backbone.js?
- 3. Quando è necessario malloc in C?
- 4. Quando è necessario utilizzare [Sfogliabile (vero)]?
- 5. Quando è necessario utilizzare le classi in PHP
- 6. Stringa Concatenazione non sicura in C#, è necessario utilizzare StringBuilder?
- 7. Non è necessario utilizzare la seq escape. per 'in C#?
- 8. Quando è necessario NSCopying?
- 9. Quando è necessario utilizzare i reindirizzamenti di binding?
- 10. Quando è necessario utilizzare la parola chiave alias esterno in C#?
- 11. Quando è necessario utilizzare gli operatori impliciti ed espliciti in C#?
- 12. È necessario utilizzare super.onActivityResult() in onActivityResult()?
- 13. Quando utilizzare C#/C++
- 14. In SQL Server, quando è necessario utilizzare GO e quando si utilizza il punto e virgola;?
- 15. Quando è necessario passare argomenti a `Thread.new`?
- 16. Quando utilizzare SqlConnection.ClearAllPools() in C#
- 17. È necessario Log4j isDebugEnabled() prima di utilizzare logger.debug()?
- 18. quando è necessario il modello dell'adattatore?
- 19. È preferibile utilizzare un "altro" in Python quando non è necessario?
- 20. C#, WPF, chiama automaticamente Dispatcher.Invoke quando necessario?
- 21. È necessario utilizzare Forever.js su OpenShift?
- 22. Quando utilizzare extern "C" in C++?
- 23. Talvolta è necessario utilizzare più librerie javascript?
- 24. Pulsante radio "selezionato = controllato" non cambia quando l'opzione è cambiata
- 25. È necessario utilizzare Process.WaitForExit dopo Process.Kill?
- 26. È necessario utilizzare InitCommonControlsEx() e InitCommonControls()?
- 27. È necessario utilizzare PHP_EOL nelle e-mail?
- 28. Quando è veramente necessario il Flush Privileges in MySQL?
- 29. Inizializza un modulo quando è necessario
- 30. Nome discussione: quando è necessario conoscerli?
OK, questo è quello che sono .. Potresti approfondire quando vuoi farlo? – NotMe