2010-06-11 61 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