Я получаю исключение IndexOutOfRange для следующей строки кода:
var searchLastCriteria = (SearchCriteria)Session.GetSafely(WebConstants.KeyNames.SEARCH_LAST_CRITERIA);
Я объясню выше здесь:
- SearchCriteria - это Enum только с двумя значениями
- Сеанс - это 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?
Я знаю, что строка выдаст исключение NullReferenceException, если GetSafely вернет значение NULL, и также выдаст исключение InvalidCastException, если оно возвратит что-либо, что не может быть приведено к SearchCriteria, но исключение IndexOutOfRange? Я чешу голову здесь.
Вот трассировка стека:
$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