2012-01-26 143 views
3

我有這樣的代碼:存在System.ArgumentException異常的捕獲塊,但是異常無法捕獲,爲什麼?

 if (typeof(Enum).IsAssignableFrom(typeof(T))) 
     { 
      try 
      { 
       return (T)Enum.Parse(typeof(T), text); 
      } 
      catch (ArgumentException e) 
      { 
       return default(T); 
      } 
     } 

但是我接收到以下情況例外:

類型「System.ArgumentException」的第一次機會異常出現在mscorlib.dll 其他信息:請求的值「ABC '找不到

這怎麼可能?爲什麼catch塊無法使用?

回答

9

catch塊爲什麼不起作用?

catch塊工作得很好,它只是你在Visual Studio調試器中看到這個。這就是first chance exception的含義。當你調試時,所有的異常都顯示在VS中,只是如果你有合適的catch子句,第一次機會異常可能會消失。順便說一句,你可以configure VS不顯示它們。

哦,只是一個側面說明:在.NET 4.0中還有的Enum.TryParse方法,所以你甚至都不需要trycatch在這個特殊的片段。

+0

這樣的代碼'T result = default(T); Enum.TryParse(text,out result);'不起作用,因爲類型T必須是不可空的 – javapowered 2012-01-27 06:46:03

1

第一次機會通知只是讓調試器知道引發異常 - 這發生在任何catch幀被考慮之前。所以總之你的例外(可能)被抓住了。