c# re-throw exception in a method designed to handle exceptions and preserve stacktrace -
i want write method handle exceptions , called inside catch block. depending on type of exception passed, exception either passed inner exception of new exception or re-thrown. how preserve stack trace in second case ?
example :
public void testmethod() { try { // can throw exception specific project or .net exception someworkmethod() } catch(exception ex) { handleexception(ex); } } private void handleexception(exception ex) { if(ex specificexception) throw ex; //will not preserve stack trace... else throw new specificexception(ex); } what not is, because pattern repeated in many places , there no factorization :
try { someworkmethod(); } catch(exception ex) { if(ex specificexception) throw; else throw new specificexception(ex); }
you need use throw without specifying exception preserve stack trace. can done inside catch block. can return handleexception without throwing original exception , use throw right afterwards:
public void testmethod() { try { // can throw exception specific project or .net exception someworkmethod() } catch(exception ex) { handleexception(ex); throw; } } private void handleexception(exception ex) { if(ex specificexception) return; else throw new specificexception(ex); } as long use is categorize exception, preferred way 2 catch blocks:
public void testmethod() { try { // can throw exception specific project or .net exception someworkmethod() } catch (specificexception) { throw; } catch(exception ex) { throw new specificexception(ex); } } with c# 6.0 can use when let exception fall through:
public void testmethod() { try { // can throw exception specific project or .net exception someworkmethod() } catch(exception ex) when (!(ex specificexception)) { throw new specificexception(ex); } }
Comments
Post a Comment