2011-12-06 110 views
0

我有以下編碼InvalidOperationException異常在try/catch塊忽略

try 
      { 
       var foundCanProperty = properties 
        .First(x => x.Name == "Can" + method.Name); 

       var foundOnExecuteMethod = methods 
        .First(x => x.Name == "On" + method.Name); 

       var command = new Command(this, foundOnExecuteMethod, foundCanProperty); 
       TrySetCommand(foundControl as Control, command); 

      } 
      catch (InvalidOperationException ex) 
      { 
       throw new FatalException("Please check if you have provided all 'On' and 'Can' methods/properties for the view" + View.GetType().FullName, ex); 
      } 

我預料的是,如果methods.First()(在第二var語句)引發InvalidOperationException,我就能抓住它。但是,這似乎不是這種情況(catch塊被忽略,應用程序終止並引發異常)。如果我在try塊中拋出同一類型的異常,它會被捕獲。 Linq是否使用多線程處理,以便在另一個線程中拋出異常?也許我也做一個愚蠢的錯誤在這裏,只是沒有看到它:(。

感謝您的幫助!

+0

Linq的延遲執行再次襲擊?很難從代碼中看出來。注意異常的調用堆棧。 –

回答

0

我知道這是不是答案,而是爲了調試一些額外的步驟,但確實它會改變任何東西,如果你試圖捕獲一般類型「Exception」而不是IOE?這可能有助於確定該方法是否真正拋出IOE,或者如果它的失敗在堆棧中的其他位置生成IOE,假設此方法不在main()中 - 是否有方法在try/catch中打包呼叫,然後檢查呼叫流中當時的行爲?

也抱歉,因爲我對SilverLight開發人員知之甚少希望這些建議不會牽強附會。

+0

'異常'基類也不會被捕獲。是的,稍後嘗試隔離它。 – Marco

0

當源序列爲空時,發生InvalidOperationException異常。 參考http://msdn.microsoft.com/en-us/library/bb291976.aspx

檢查天氣「屬性」或「方法」不是空的。

出於興趣,爲什麼不使用FirstOrDefault?

+0

例外情況是正確的(按照意圖)。我想抓住它並拋出另一個異常,並描述開發人員爲解決錯誤所做的事情。它是API的一部分 – Marco