@Brad Tutterow
Excepția nu se pierde în primul caz, ci este transmisă constructorului. Cu toate acestea, voi fi de acord cu restul dvs., a doua abordare este o idee foarte proastă din cauza pierderii urmei. Când am lucrat cu .NET, am fugit în multe cazuri în care alți programatori au făcut asta, și m-au frustrat fără sfârșit atunci când aveam nevoie să văd adevărata cauză a unei excepții, doar pentru a găsi că este redus de la un bloc de încercare uriaș Acum nu am nici o idee în legătură cu originea problemei.
De asemenea, am comentat comentariul lui Brad că nu trebuie să vă faceți griji cu privire la spectacol. Acest tip de optimizare micro este o idee HORRIBLE. Cu excepția cazului în care vorbești despre aruncarea unei excepții în fiecare iterație a unui buclă pentru care se execută o perioadă lungă de timp, probabil că nu te vei întâlni în probleme de performanță prin modul de utilizare excepțional.
Optimizați întotdeauna performanța atunci când aveți valori care indică faptul că este necesar să optimizați performanța și apoi loviți petele care s-au dovedit a fi vinovat.
Este mult mai bine să aveți un cod care poate fi citit, cu capacități ușoare de depanare (IE nu ascunde urmărirea stivei), decât să facă ceva să ruleze mai repede o nanosecundă.
O notă finală despre împachetarea excepțiilor într-o excepție particularizată ... aceasta poate fi o construcție foarte utilă, mai ales atunci când se ocupă de UI-uri. Puteți încheia orice caz excepțional cunoscut și rezonabil într-o excepție personalizată de bază (sau una care se extinde de la excepția de bază menționată), iar apoi utilizatorul poate captura doar această excepție de bază. Când este capturat, excepția va trebui să furnizeze mijloacele de afișare a informațiilor către utilizator, să spună o proprietate ReadableMessage sau ceva de-a lungul acestor linii. Astfel, ori de câte ori UI ratează o excepție, este din cauza unei erori pe care trebuie să o remediați și oricând captează o excepție, este o condiție de eroare cunoscută care poate și ar trebui să fie gestionată corespunzător de interfața utilizator.