2009-06-12 11 views
11

So che probabilmente questo non ha molta importanza, ma mi piacerebbe sapere cosa è corretto.C#: sollevate o lanciate un'eccezione?

Se una parte di codice contiene una versione di throw new SomeKindOfException(). Diciamo che questa parte di codice può potenzialmente generare un'eccezione? O lanciare un'eccezione?

La parola chiave è throw, quindi sono di tipo appoggiato verso quella, ma di sollevare un'eccezione viene utilizzato anche un sacco ...

Hanno una sorta di significato diverso? Uno di questi implica una differenza rispetto all'altro? O sono solo due parole che significano esattamente la stessa cosa?

+0

Per una discussione correlata in Ruby: http://stackoverflow.com/questions/51021 –

risposta

25

In C# terminologia, alzando è usato nel contesto di eventi e lancio viene utilizzato nel contesto delle eccezioni.

Personalmente, penso che la combinazione throw/catch sia più bella di raise/catch.

+0

Ah, naturalmente, sono completamente d'accordo. Ha perfettamente senso ora! Grazie per averlo chiarito :) – Svish

+3

C# usa anche "lift", per indicare "fornire una versione nullable di un operatore su tipi non annullabili" e "sollevare" per significare "trasformare una variabile locale in un campo di una chiusura classe". Quindi in C# puoi sollevare, sollevare o sollevare oggetti, e tutti significano qualcosa di diverso. –

3

Non riesco a parlare per C#, ma in C++ è stato scelto "throw" perché "raise" era già stato preso come nome di funzione standard.

1

Penso che mentre passi è il migliore, i due termini sono intercambiabili. Molto utile se devi usarlo due volte in un testo per evitare di ripetere la stessa parola. Ma questa è una stilistica che non è necessaria per la scrittura tecnica (ma comunque una cosa carina da avere).

+2

Hai ragione nella scrittura inglese, ma nella scrittura tecnica è meglio usare sempre la stessa parola, o il lettore può pensare che ci sia qualche differenza. – stivlo

0

O il tiro o il sollevamento sembra a posto, lo stesso per me. Non lo scriverei, ma quando parlo di solito dico "chuck un'eccezione".

Per gli eventi, utilizzerei "spegni un evento" o "alza un evento".

+0

"Fire" è ovviamente di uso comune per gli eventi. Quando sono venute le linee guida terminologiche, la squadra ha pensato che "il fuoco" sembrava inutilmente falso, quindi hanno suggerito di evitare il "fuoco" in favore del "rilancio".La mia opinione personale è che questo è un po 'sciocco, ma "raise" va bene e potremmo anche standardizzarci su uno o l'altro. –

1

La terminologia delle varie lingue favorisce il "lancio". E sono d'accordo sul fatto che "lanciare" ha molto più senso considerando che questa è la parola chiave utilizzata e che la documentazione del compilatore/linguaggio fa sempre riferimento all'eccezione "lanciata".

Tuttavia, nel ventre del behemoth le eccezioni sono in realtà Raised, non generate. Se ti trovi abbastanza in profondità nel debugger che fissa uno EXCEPTION_RECORD, parli nella terminologia di SEH, in cui la particolare classe di eccezioni del compilatore/lingua (eh, clr, vcpp) è solo una delle tante eccezioni di sapori che vengono. Immagino che le condizioni originali per le quali le eccezioni dovessero essere sollevate, come gli errori di pagina e gli overflow dello stack, erano condizioni "notate" dal kernel che "informava" la modalità utente della condizione e non un'eccezione il codice utente stava "gettandosi" su se stesso , quindi il termine ha più senso in quel contesto.