以下面的最小示例拋出異常:C#:不覆蓋當前活動的一個
try { foo }
finally { bar() }
foo
可以或可以不丟,並且bar()
可以或可以不丟。 如果兩個函數都拋出,則bar()
拋出的異常將覆蓋foo
拋出的異常。但是,我需要看看foo
引發的異常情況。我可以控制的唯一代碼是bar()
。 在C++中,可以通過在bar()
內檢查std::uncaught_exceptions
來實現。 C#怎麼樣?
有a check using Marshal.GetExceptionPointers(),但作爲回答狀態,這是一個可怕的黑客,在我的情況下,它是不夠的,因爲我的代碼需要在Mono運行,在沒有實現該功能。
語境:
在我的現實生活中的案例,foo
是由圖書館用戶提供,可能會拋出各種異常的一大塊代碼,並bar()
是由我提供的Dispose
功能並自動調用。
正如你可以控制代碼'bar'包裝在try/catch塊所以外面只能看到由'foo'拋出的異常。 –