访问在C#中保存字典对象的Application变量

时间:2011-10-10 10:58:44

标签: c# variables dictionary for-loop

我在应用程序范围内创建了一个Dictionary,但我不确定如何在另一个页面中正确访问它。

  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语句不能对'object'类型的变量进行操作,因为'object'不包含'GetEnumerator'的公共定义”

要点是我需要创建一个字典来保存一个价值/对数据表,这些数据不会改变,需要访问/比较网站的不同部分。

帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

存储为应用程序变量(或会话变量)的所有内容都是对象类型。

我命令将该应用程序变量作为Dictionary对象读取,只需将该对象强制转换为它:

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

答案 1 :(得分:1)

由于Application可以存储许多不同类型,因此必须将它们存储为Object,所有类型的父类都是从中继承的。您需要将Application["PaginationTable"]转换为正确的类型,即foreach可以操作的Dictionary<int, int>。即:

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

请注意,保存键入KeyValuePair<int, int>可以替换为var,因为编译器可以在编译时计算出正确的类型。


还要注意该行

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

是多余的,因为你只需将另一个对象分配给它。