Может ли эта строка кода вызвать исключение IndexOutOfRange? - PullRequest
0 голосов
/ 11 июня 2010

Я получаю исключение IndexOutOfRange для следующей строки кода:

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

Я объясню выше здесь:

  1. SearchCriteria - это Enum только с двумя значениями
  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?

Я знаю, что строка выдаст исключение 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 

Ответы [ 2 ]

1 голос
/ 11 июня 2010

Weird. Я бы сказал, что ваши файлы PBD неверны.

0 голосов
/ 11 июня 2010

Трудно сказать однозначно, , но я думаю, что объект, возвращенный из GetSafely(), является причиной исключения. Похоже, что некоторый код за пределами этого метода пытается перебрать содержимое возвращаемого объекта, и это то, где вы терпите неудачу.

Я думаю, что вам нужно начать смотреть на код, который использует объект, возвращенный из GetSafely().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...