2008-09-24 7 views
16

मैं वर्तमान में निम्नलिखित तरीके से एक Hashtable आरंभ कर रहा हूँ:क्या एड विधि में उपयोग किए बिना .NET में हेस्टेबल को प्रारंभ करने का कोई बेहतर तरीका है?

Hashtable filter = new Hashtable(); 
filter.Add("building", "A-51"); 
filter.Add("apartment", "210"); 

मैं यह करने के लिए एक अच्छा तरीका है के लिए देख रहा हूँ।

मैं की तरह

Hashtable filter2 = new Hashtable() { 
    {"building", "A-51"}, 
    {"apartment", "210"} 
}; 

कुछ हालांकि इसके बाद के संस्करण कोड संकलन नहीं है की कोशिश की।

उत्तर

25

सटीक कोड तुम्हें तैनात:

 Hashtable filter2 = new Hashtable() 
     { 
      {"building", "A-51"}, 
      {"apartment", "210"} 
     }; 

सी # 3. में पूरी तरह से संकलित को देखते हुए आपके द्वारा रिपोर्ट संकलन समस्याओं, मैं तुम्हें सी # 2 का उपयोग कर रहे अनुमान लगा रहा हूँ? इस मामले में आप कम से कम कर सकते हैं:

 Hashtable filter2 = new Hashtable(); 
     filter2["building"] = "A-51"; 
     filter2["apartment"] = "210"; 
9

# 3 सी में इसे इस तरह ठीक संकलन करना चाहिए:

Hashtable table = new Hashtable {{1, 1}, {2, 2}}; 
+0

वस्तु initializers के लिए, निर्माता कोष्ठक वैकल्पिक हैं? –

+0

यदि आपके पास खाली सीटीओआर है, या – mattlant

0

(नहीं एक सी # विशेषज्ञ)

यह वाक्यात्मक चीनी है, और अगर यह वाक्यात्मक चीनी है मैं मानचित्रण करना चाहते हैं (एक Hashtable में) अच्छा और स्पष्ट:

 

Hashtable filter2 = new Hashtable() { "building" => "A-51", "apartment" => "210"}; 

हालांकि मैं इस के लिए एक वास्तविक जरूरत नहीं दिख रहा है, वहाँ न सिर्फ initialisation के बाद जोड़ने के कॉल करने के लिए होने के साथ बहुत गलत है।

(मैंने लोगों को जावा के लिए अतीत में समान चीजों को प्राप्त करने के लिए जावा कंपाइलर के साथ हैक करने के लिए जाना है (जिसके कारण कुछ साल बाद जावा 5 में प्रमुख समस्याएं आईं), मुझे उम्मीद है कि यह एक विकल्प नहीं है सी # हालांकि)

+0

यदि आपको इनलाइन जोड़ने की आवश्यकता है तो 0- someclass.AddTable (नया हैशटेबल {{1, "ए"}, {2, "बी"}}; पोस्ट किए गए पोस्टर के रूप में – mattlant

0

मैं असली सवाल जैसे कल्पना कंस्ट्रक्टर्स के बारे में हो सकता है कहा जा रहा है लगता है:

HashTable हिंदुस्तान टाइम्स = नए HashTable (myArray); // सरणी से भरें

हैशटेबल एचटी = नया हैशटेबल (MyDataTable); // डेटाटेबल से भरें

AFAIK, उत्तर "नहीं" है, लेकिन आप इसे स्वयं लिख सकते हैं। मुझे लगता है कि पुस्तकालय में ऐसी विधियां नहीं हैं, यह है कि ऐरे या डेटाटेबल को ठीक से बनाया जाना चाहिए। यह इतना बड़ा नुकसान नहीं है क्योंकि इन विधियों के किसी भी कार्यान्वयन के लिए संभवत: लूप में ऐड विधि का उपयोग किया जा रहा है।

+0

ऑब्जेक्ट प्रारंभकर्ता सी # 3 भाषा का हिस्सा है। कंपाइलर कोड लेता है और इसे कॉल कॉल में संकलित करता है। बहुत अधिक किसी भी वर्ग जिसमें एक ऐड विधि है (IENumerable लागू करना) इस तरह से शुरू किया जा सकता है। – mattlant

0

मुझे सी # 3.0 Hashtable table = new Hashtable {{1, 1}, {2, 2}}; संकलन में कोई जानकारी नहीं थी।

वैसे भी, गरीब आदमी का कार्यान्वयन:

class MyHashTable : System.Collections.Hashtable  
{ 
    public MyHashTable(string [,] values) 
    { 
     for (int i = 0; i < (values.Length)/2; i++) 
     { 
      this.Add(values[i,0], values[i,1]); 
     } 
    } 
} 

तो एक कंसोल App से और::

मेह, आप Hashtable वर्ग का विस्तार कर सकता है

class Program 
{ 
    static void Main(string[] args) 
    { 
     string[,] initialize = { { "building", "A-51" }, { "apartment", "210" }, {"wow", "nerf Druids"}}; 



     MyHashTable myhashTable = new MyHashTable(initialize); 
     Console.WriteLine(myhashTable["building"].ToString()); 
     Console.WriteLine(myhashTable["apartment"].ToString()); 
     Console.WriteLine(myhashTable["wow"].ToString()); 
     Console.ReadKey(); 


    } 
} 

परिणाम देगा में:
ए -51
नेरफ ड्रुइड्स

इस

त्वरित किया गया था तो यह उसके बाद फिर से कुछ स्थितियों में बम हो सकता है लेकिन ..

+0

शायद ऑब्जेक्ट [,]? क्योंकि आप किसी भी (अपरिवर्तनीय) ऑब्जेक्ट का उपयोग हैशटेबल कुंजी के रूप में कर सकते हैं, केवल स्ट्रिंग्स नहीं। और बीटीडब्ल्यू, ड्रस ने पर्याप्त नरक देखा है :) मैगे भी;) (अस्वीकरण: बहुत दुखी मज़े :) :) –

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

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