2011-10-10 49 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"])