Доступ к переменной приложения, которая содержит объект словаря в C # - PullRequest
1 голос
/ 10 октября 2011

Я создал словарь в области приложения, но я не уверен, как правильно получить к нему доступ на другой странице.

  void Application_Start(object sender, EventArgs e) 
{

    Application["PaginationTable"] = new Dictionary<int, int>();

    Dictionary<int, int> dictPagination = new Dictionary<int, int>();

    //fill dict
    for (int i = 0; i < 40; i++)
    {
        etc
    }

    Application["PaginationTable"] = dictPagination;

}

В myotherpage.cs

 foreach (KeyValuePair<int, int> pair in Application["PaginationTable"])
  {

      Response.Write(pair.Key +" :: " + pair.Value  + "<br>");
      etc
  }

Произошла ошибка: «оператор foreach не может работать с переменными типа« объект », потому что« объект »не содержит общедоступного определения для« GetEnumerator »»

Суть в том, что мне нужно создать словарь для хранения таблицы данных значения / пары, которая не изменится и будет нуждаться в доступе / сравнении по различным разделам сайта.

Помощь оценена

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

Все, что хранится как переменная приложения (или переменная сеанса), имеет тип Объект .

Я приказываю прочитать эту прикладную переменную как объект Dictionary, просто приведу этот объект к нему:

 foreach (var pair in (Dictionary<int, int>)Application["PaginationTable"])
1 голос
/ 10 октября 2011

Так как Application может хранить много разных типов, он должен хранить их как Object, родительский класс, от которого наследуются все типы. Вам необходимо привести Application["PaginationTable"] к правильному типу, то есть Dictionary<int, int>, с которым может работать foreach. i.e.:

foreach (KeyValuePair<int, int> pair in (Dictionary<int, int>)Application["PaginationTable"])

Обратите внимание, что для сохранения набора KeyValuePair<int, int> можно заменить на var, так как компилятор может определить правильный тип во время компиляции.


Также обратите внимание, что строка

Application["PaginationTable"] = new Dictionary<int, int>();

является избыточным, поскольку вы просто назначаете ему другой объект внизу.

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