2011-10-10 69 views
1

我在Application范围中创建了一个字典,但我不确定如何在另一个页面中正确访问它。访问C语言中保存字典对象的应用程序变量#

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’一个公共定义“

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

帮助理解存储为应用程序变量(或会话varible)

回答

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>(); 

是多余的,因为你只是分配另一个目的是它低了下去。

+0

感谢您的解释,它现在是有道理的(它的工作原理)。 – usermomo

+0

好,很高兴我能帮到你。如果我的回答最有帮助,请务必点击旁边的绿色“勾号”。 –

2

一切类型对象的。

我命令来读取应用程序变量作为解释的对象,只投该对象到它:

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