这行代码是否真的会抛出IndexOutOfRange异常?
我在下面的代码行获得的IndexOutOfRange例外:这行代码是否真的会抛出IndexOutOfRange异常?
var searchLastCriteria = (SearchCriteria)Session.GetSafely(WebConstants.KeyNames.SEARCH_LAST_CRITERIA);
我会在这里解释以上:
- SearchCriteria是一个枚举只有两个值
- 会议是HttpSessionState
-
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
奇怪。我会说你的PBD文件是错误的。
PDB时间戳与DLL上的时间戳相匹配。我认为同样的事情,但我没有看到任何代码在这一行上面或下面,这也会导致异常。 – 2010-06-11 19:03:29
毕竟,PDB显着失效。 – 2010-06-11 20:35:28
很难肯定地说,但我认为将对象从GetSafely()
返回是什么导致了异常。它看起来像该方法外的一些代码试图遍历返回的对象的内容,这就是你失败的地方。
我认为您需要开始查看使用从GetSafely()
返回的对象的代码。
虽然这行是堆栈跟踪中的最后一行。如果异常来自其他任何地方,是否会反映在堆栈跟踪中? – 2010-06-11 19:11:47
如果您发布堆栈跟踪,这将有所帮助。 – LBushkin 2010-06-11 17:55:27
log.Info(exc)是做什么的?那里的例外会来自那里吗? – Jaymz 2010-06-11 18:03:10
log.Info(exc)是一个log4net记录器。如果发生异常,它应该显示在堆栈跟踪中,至少显示GetSafely方法中发生异常。 – 2010-06-11 18:05:11