2010-06-11 57 views
0

我在下面的代碼行獲得的IndexOutOfRange例外:這行代碼是否真的會拋出IndexOutOfRange異常?

var searchLastCriteria = (SearchCriteria)Session.GetSafely(WebConstants.KeyNames.SEARCH_LAST_CRITERIA); 

我會在這裏解釋以上:

  1. SearchCriteria是一個枚舉只有兩個值
  2. 會議是HttpSessionState
  3. GetSafely是一個擴展方法,看起來像這樣:

    public static object GetSafely(this HttpSessionState source, string key) 
    { 
        try { return source[key]; } 
        catch (Exception exc) { log.Info(exc); return null; } 
    } 
    
  4. WebConstants.KeyNames.SEARCH_LAST_CRITERIA簡直是一個常數

我用盡了一切辦法來複制這個錯誤,但我不能複製。我開始認爲堆棧跟蹤是錯誤的。我想也許這個異常實際上來自GetSafely調用,但是它吞噬了這些異常,所以事實並非如此,即使它是,它也應該顯示在堆棧跟蹤中。

上面的代碼行中是否有可能拋出IndexOutOfRange異常的東西?

我知道如果GetSafely返回null,那麼這行會拋出一個NullReferenceException異常,如果它返回任何不能轉換爲SearchCriteria但是IndexOutOfRange異常的異常,它還會拋出一個InvalidCastException異常?我在這裏撓頭。

這裏是堆棧跟蹤:

$LOG--> 2010-06-11 07:01:33,814 [ERROR] SERVERA (14) Web.Global - Index was outside the bounds of the array. 
System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.IndexOutOfRangeException: Index was outside the bounds of the array. 
    at IterateSearchResult(Boolean next) in C:\Projects\Web\UserControls\AccountHeader.ascx.cs:line 242 
    at nextAccountLink_Click(Object sender, EventArgs e) in C:\Projects\Web\UserControls\AccountHeader.ascx.cs:line 232 
+4

如果您發佈堆棧跟蹤,這將有所幫助。 – LBushkin 2010-06-11 17:55:27

+0

log.Info(exc)是做什麼的?那裏的例外會來自那裏嗎? – Jaymz 2010-06-11 18:03:10

+0

log.Info(exc)是一個log4net記錄器。如果發生異常,它應該顯示在堆棧跟蹤中,至少顯示GetSafely方法中發生異常。 – 2010-06-11 18:05:11

回答

1

奇怪。我會說你的PBD文件是錯誤的。

+0

PDB時間戳與DLL上的時間戳相匹配。我認爲同樣的事情,但我沒有看到任何代碼在這一行上面或下面,這也會導致異常。 – 2010-06-11 19:03:29

+0

畢竟,PDB顯着失效。 – 2010-06-11 20:35:28

0

很難肯定地說,但我認爲將對象從GetSafely()返回是什麼導致了異常。它看起來像該方法外的一些代碼試圖遍歷返回的對象的內容,這就是你失敗的地方。

我認爲您需要開始查看使用從GetSafely()返回的對象的代碼。

+0

雖然這行是堆棧跟蹤中的最後一行。如果異常來自其他任何地方,是否會反映在堆棧跟蹤中? – 2010-06-11 19:11:47