Multi-key dictionary in c#? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 14 जवाब

मुझे पता है वहाँ नहीं है एक बीसीएल में, लेकिन क्या कोई मुझे एक अच्छा ओपनसोर्स एक में बता सकता है?

मल्टी द्वारा मैं 2 कुंजी का मतलब है ; -)

मैंने जेसन की तरह ट्यूपल्स का इस्तेमाल किया है हालांकि, मेरा सुझाव है कि आप केवल एक संरचना के रूप में एक ट्यूपल को परिभाषित करते हैं:

  सार्वजनिक संरचना ट्यूपल & lt; T1, T2 & gt; {सार्वजनिक रीडोनली टी 1 मद 1; सार्वजनिक रीडोनली टी 2 मद 2; सार्वजनिक ट्यूपल (टी 1 मद 1, टी 2 मद 2) {आइटम 1 = आइटम 1; मद 2 = आइटम 2;}} सार्वजनिक स्थैतिक वर्ग ट्यूपल {// टाइप-एन्फरेंस वेलनेस के लिए सार्वजनिक स्थिर ट्यूपल & lt; T1, टी 2 & gt; बनाएँ & lt; T1, T2 & gt; (T1 आइटम 1, टी 2 मद 2) {नया ट्यूपल & lt; T1, T2 & gt; (आइटम 1, आइटम 2); }}  

आपको अपरिवर्तनीयता प्राप्त है, .getHashcode और .Equals मुफ़्त के लिए, (जब आप C # 4.0 के लिए प्रतीक्षा कर रहे हैं) अच्छा है 'n सरल ...

एक चेतावनी हालांकि: डिफ़ॉल्ट GetHashcode कार्यान्वयन (कभी-कभी) इसलिए सुनिश्चित करें कि पहले फ़ील्ड को सबसे अधिक FieldwiseHasher.Hash (this) से उपयोग करना), अन्यथा आप की संभावना स्केलेबिलिटी मुद्दों में चलेंगे।

इसके अलावा, आप नल से बचने के लिए जाते हैं जो कि मामलों को मुश्किल करते हैं (और यदि आप वास्तव में नाक चाहते हैं, तो आप अपना Tuple & lt; & gt; nullable) बनाते हैं। थोड़ा सा ऑफटेकिक, क्या मैं गैर-रिक्त संदर्भों के समर्थन के ढांचे-स्तर की कमी पर केवल एक ही नाराज़ हूं? मैं बड़ी परियोजना पर काम करता हूं, और कभी-कभी कहीं एक अशक्त ढोंगी में वास्तव में नहीं होना चाहिए - और हे प्रेस्टन, आपको एक नलरेफरेंस अपवाद मिलता है - लेकिन एक स्टैक ट्रेस के साथ, जो आपको संदर्भ के पहले उपयोग में बताता है, वास्तव में खराब कोड नहीं है ।

बेशक, अभी तक .NET 4.0 बहुत पुराना है; अधिकांश उपयोग केवल .NET 4.0 के ट्यूपल का उपयोग कर सकते हैं।

*** संपादित करें: *** खराब काम करने के लिए GetHashCode कार्यान्वयन। लिखित, जो आपको अपनी बहु-फ़ील्ड कुंजियों के लिए वास्तविक नामों का उपयोग करने की अनुमति देता है; इसका अर्थ है कि आप कुछ लिख सकते हैं:

  सीलबंद वर्ग MyValueObject: ValueObject & lt; MyValueObject & gt; {सार्वजनिक डेऑफ़ वेक दिवस; सार्वजनिक स्ट्रिंग NamedPart; // संपत्तियां ठीक काम करती हैं}  

... जो उम्मीद से कम से कम तब तक मान सिमेंटिक के साथ डेटा के लिए मानव-पठनीय नामों को आसान बना देता है; उम्मीद है कि सभ्य हैशकों के साथ; -)।


Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -