我在以下代码行中收到了IndexOutOfRange异常:
var searchLastCriteria = (SearchCriteria)Session.GetSafely(WebConstants.KeyNames.SEARCH_LAST_CRITERIA);
我将在此解释上述内容:
GetSafely是一种扩展方法,如下所示:
public static object GetSafely(this HttpSessionState source, string key)
{
try { return source[key]; }
catch (Exception exc) { log.Info(exc); return null; }
}
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
答案 0 :(得分:1)
怪异。我会说你的PBD文件错了。
答案 1 :(得分:0)
很难明确地说,但我认为从GetSafely()
返回的对象是造成异常的原因。看起来该方法之外的一些代码试图迭代返回对象的内容,这就是你失败的地方。
我认为您需要开始查看使用从GetSafely()
返回的对象的代码。