2011-02-15 11 views
7


में सामग्री स्ट्रिंग सरणी मेरे पास एक कोड है।हैशटेबल के साथ मदद करता है जो सी #

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"}; 

अब मैं इस तरह के एचटी से मूल्य प्राप्त करना चाहता हूं।

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

लेकिन यह त्रुटि देता है। तो मेरे लिए इस समस्या को हल करना कैसे संभव हो सकता है।

+0

शब्दकोश के लिए स्टूडियो –

उत्तर

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]; 

यह ठीक संकलन चाहिए। untyped वस्तुओं

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

+1 में त्रुटि।इस तरह की समस्याओं के लिए यह बेहतर फिटिंग प्रकार है। – Oliver

2

Hashtable भंडार:

नहीं तो आप इस तरह के रूप में एक कच्चा प्रदर्शन करने की जरूरत है आप मूल्य तुम वापस पढ़ा फिर से कास्ट करने के लिए एक स्ट्रिंग सरणी, उदा में आवश्यकता होगी

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

आपका hashtable प्रकार वस्तु का है, इसलिए जब आप सरणी तक पहुँचने का प्रयास है, तो आप के बाद से वस्तु सरणी एक्सेसर वाक्यविन्यास का उपयोग कर रहे समर्थन नहीं करता है एक त्रुटि मिल जाएगा। यदि आपने अन्य उत्तरों में समझाया गया है, तो आप एक शब्दकोश का उपयोग करते हैं, तो आप यह परिभाषित करने के लिए जेनेरिक का उपयोग कर सकते हैं कि आप ऑब्जेक्ट्स की तुलना में स्ट्रिंग एरे राहे का उपयोग कर रहे हैं, जो आपकी इच्छा के अनुसार काम करेगा।

वैकल्पिक रूप से, अगर आप इस तरह अपने चर डाली कर सकते हैं:

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

यह आप अस्थायी के लिए उपयोग है कि आप की इच्छा दे देंगे।

संबंधित मुद्दे