2011-02-15 46 views
7


我有這樣的代碼。幫助HashTables其中的內容字符串數組在C#

Hashtable ht = new HashTable(); 
ht["LSN"] = new string[5]{"MATH","PHIS","CHEM","GEOM","BIO"}; 
ht["WEEK"] = new string[7]{"MON","TUE","WED","THU","FRI","SAT","SUN"}; 
ht["GRP"] = new string[5]{"10A","10B","10C","10D","10E"}; 

現在我想從下面這個ht得到值。

string s = ht["LSN"][0]; 

但它給出錯誤。那麼我該如何解決這個問題。

+0

錯誤以工作室 – 2011-02-15 09:46:17

回答

8

我想你想使用一個通用的類型化的解釋,而不是一個Hashtable:

Dictionary<String, String[]> ht = new Dictionary<string, string[]>(); 

ht["LSN"] = new string[5] { "MATH", "PHIS", "CHEM", "GEOM", "BIO" }; 
ht["WEEK"] = new string[7] { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" }; 
ht["GRP"] = new string[5] { "10A", "10B", "10C", "10D", "10E" }; 

string s = ht["LSN"][0]; 

這應該編譯罰款。

否則則需要執行的鑄造如:

string s = (ht[ "LSN" ] as string[])[ 0 ]; 
+0

+1爲字典。對於這些問題,這是更合適的類型。 – Oliver 2011-02-15 09:51:48

2

哈希表存儲無類型的對象:你需要重新投你回讀值轉換成一個字符串數組,例如

string s = ((string[])ht["LSN"])[0]; 

string s = (ht["LSN"] as string[])[0]; 

但是你最好不要使用什麼類型的,例如一個Dictionary<> - 那麼它只會工作:

Dictionary<string, string[]> ht = new Dictionary<string, string[]>(); 
... 
string s = ht["LSN"][0]; 
1

ht["LSN"][0]將返回一個字符串數組。所以你必須添加另一個索引器來獲得正確的值。

((string[])ht["LSN"][0])[0] 
1

HashTable類的indexer總是返回object一個實例。你必須是對象轉換爲字符串數組:

string s = ((string[]) ht["LSN"])[0]; 

這就是說,可以考慮使用一般的Dictionary<TKey, TValue>類代替。

1

由於Hashtable內容公開爲object你需要投:

string s = (ht["LSN"] as string[])[0]; 

但你可能會更好使用強類型的容器由Nick的建議。

1
string[] aStrings = (string[])ht["LSN"]; 
string s = aStrings[0]; 
2

你的哈希表類型的對象,所以當您嘗試訪問數組,你會因爲對象不支持數組訪問語法使用的是得到一個錯誤。如果您使用了字典,如其他答案中所解釋的那樣,您可以使用泛型來定義您正在使用字符串數組而不是對象,這可以按照您的需要進行操作。

或者,你可以施展你的變量是這樣的:

string[] temp = (string[])ht["LSN"]; 

這會給你,你的願望訪問溫度。