这行代码真的可以引发IndexOutOfRange异常吗?

时间:2010-06-11 17:54:12

标签: c# asp.net exception

我在以下代码行中收到了IndexOutOfRange异常:

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

我将在此解释上述内容:

  1. SearchCriteria是一个只包含两个值的枚举
  2. Session是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只是一个常数

  5. 我已经尝试了所有内容来复制此错误,但我无法重现它。我开始认为堆栈跟踪是错误的。我想也许这个异常实际上是来自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 
    

2 个答案:

答案 0 :(得分:1)

怪异。我会说你的PBD文件错了。

答案 1 :(得分:0)

很难明确地说,但我认为从GetSafely()返回的对象是造成异常的原因。看起来该方法之外的一些代码试图迭代返回对象的内容,这就是你失败的地方。

我认为您需要开始查看使用从GetSafely()返回的对象的代码。