2013-05-21 63 views
3

是否有一個C#方法返回到最上方的調用者,名稱爲MY方法引發異常,即使實際異常被另一個引發(例如,當我的方法調用它時數據庫驅動程序出錯) ?你能得到拋出異常的方法名嗎?

來電 - >的MyMethod - > DbDriver(錯誤)

我想 「的MyMethod」,而不是 「DbDriver」

我寧願不重新拋出異常一路向上鏈。

我目前的問題是迭代StackTrace框架,並使用MethodBase.GetCurrentMethod().DeclaringType解析出我的方法。

是否有內置的方法來獲取此信息或更優雅的解決方案?

謝謝!

+4

您需要的信息不僅僅是堆棧跟蹤本身嗎? – Arran

+0

@Arran - 是在堆棧跟蹤中,它只是覺得有點kludgey這樣得到它。 – EuroMarkus

+0

我通過檢查這個答案解決http://stackoverflow.com/questions/27997276/get-method-name-that-threw-exception –

回答

15

使用Exception.TargetSite屬性來獲取方法名

獲取拋出當前異常的方法。

+0

我看着'Exception.TargetSite',但問題是屬性可以返回方法名稱那不是我的**。 例如:如果ODBC錯誤在我的方法拋出,TargetSite將返回ODBC方法的名稱,而不是**我的方法名**,在發生錯誤 (我將編輯我的OP,使這個。位更清晰) – EuroMarkus

+0

@EuroMarkus,在這種情況下,你目前的方法是通過棧跟蹤幀可能是要走的路。我不認爲在.Net框架中有直接的方法。 – Habib

+0

ex.TargetSite.Name –