2009-06-11 12 views
21

क्या कोई मुझे कुछ सी # कोड उदाहरणों के बारे में बता सकता है या कुछ कोड प्रदान कर सकता है, जहां एक कक्षा के लिए एक संपत्ति के रूप में एक शब्दकोश का उपयोग किया गया है।एक संपत्ति के रूप में .NET शब्दकोश

मैंने जो उदाहरणों को अब तक देखा है, वे सभी पहलुओं को कवर नहीं करते हैं, जैसे शब्दकोश को शब्दकोश के रूप में घोषित करने, जोड़ने, निकालने और पुनर्प्राप्त करने के तरीके को कैसे घोषित किया जाए।

उत्तर

32

यहां एक त्वरित उदाहरण है

class Example { 
    private Dictionary<int,string> _map; 
    public Dictionary<int,string> Map { get { return _map; } } 
    public Example() { _map = new Dictionary<int,string>(); } 
} 

कुछ उपयोग के मामलों

var e = new Example(); 
e.Map[42] = "The Answer"; 
+0

हाँ सही "42" "जीवन, ब्रह्मांड, और सब कुछ के अंतिम प्रश्न का उत्तर" है। – Equiman

16

नमूना कोड:

public class MyClass 
{ 
    public MyClass() 
    { 
    TheDictionary = new Dictionary<int, string>(); 
    } 

    // private setter so no-one can change the dictionary itself 
    // so create it in the constructor 
    public IDictionary<int, string> TheDictionary { get; private set; } 
} 

नमूना उपयोग:

MyClass mc = new MyClass(); 

mc.TheDictionary.Add(1, "one"); 
mc.TheDictionary.Add(2, "two"); 
mc.TheDictionary.Add(3, "three"); 

Console.WriteLine(mc.TheDictionary[2]); 
+4

मैं IDictionary बजाय पूरी कक्षा के रूप में संपत्ति को उजागर करने पर विचार करेंगे। –

+0

ठीक है, संपत्ति बदल दी –

1

एक उदाहरण ...

public class Example 
{ 
    public Dictionary<Int32, String> DictionaryProperty 
    { 
     get; set; 
    } 

    public Example() 
    { 
     DictionaryProperty = new Dictionary<int, string>(); 
    } 
} 

public class MainForm 
{ 
    public MainForm() 
    { 
     Example e = new Example(); 

     e.DictionaryProperty.Add(1, "Hello"); 
     e.DictionaryProperty.Remove(1); 
    } 
} 
10

तुम भी indexers पर गौर कर सकता है। (सरकारी MSDN प्रलेखीकरण here)

class MyClass 
{ 
    private Dictionary<string, string> data = new Dictionary<string, string>(); 

    public MyClass() 
    { 
     data.Add("Turing, Alan", "Alan Mathison Turing, OBE, FRS (pronounced /ˈtjʊ(ə)rɪŋ/) (23 June, 1912 – 7 June, 1954) was a British mathematician, logician, cryptanalyst and computer scientist.") 
     //Courtesy of [Wikipedia][3]. Used without permission 
    } 

    public string this [string index] 
    { 
     get 
     { 
      return data[index]; 
     } 
    } 
} 

फिर, जब आप शब्दकोश आंतरिक रूप ले लिया है, तो आप इसे जानकारी दी गई है के लिए जा रहा द्वारा उपयोग कर सकते हैं

MyClass myExample = new MyClass(); 

string turingBio = myExample["Turing, Alan"]; 

संपादित

जाहिर है, इस हो गया है सावधानीपूर्वक उपयोग किया जाता है, क्योंकि MyClass कोई शब्दकोश नहीं है, और आप तब तक किसी भी शब्दकोश विधियों का उपयोग नहीं कर सकते हैं जब तक आप उन्हें रैपर वर्ग के लिए लागू नहीं करते। लेकिन कुछ स्थितियों में सूचकांक एक महान उपकरण हैं।

2

केवल प्राप्त एक्सेसर के साथ एक स्थिर संपत्ति के रूप में एक शब्दकोश का उपयोग करने का एक और उदाहरण:

private static Dictionary <string, string> dict = new Dictionary <string,string>(){    
      {"Design Matrix", "Design Case"}, 
      {"N/A", "Other"} 
    }; 


    public static Dictionary <string, string> Dict 
    { 
     get { return dict} 
    }   

यह संरचना मूल्यों को बदलने के लिए इस्तेमाल किया जा सकता।

4

यह सुनिश्चित करने के लिए कि encapsulation सही है और शब्दकोश को जोड़ें या फॉर्म का उपयोग करके कक्षा के बाहर शब्दकोश को अपडेट नहीं किया जा सकता उदाहरण उदाहरण [1] = "test", IReadOnlyDictionary का उपयोग करें।

public class Example 
{ 
    private Dictionary<int, string> exampleDictionary; 

    public Example() 
    { 
     exampleDictionary = new Dictionary<int, string>(); 
    } 

    public IReadOnlyDictionary<int, string> ExampleDictionary 
    { 
     get { return (IReadOnlyDictionary<int, string>)exampleDictionary; } 
    } 
} 

निम्नलिखित कोड काम करेंगे नहीं है, इस स्थिति में अगर IDictionary प्रयोग किया जाता है नहीं है:

var example = new Example(); 
example.ExampleDictionary[1] = test; 
+0

मुझे पता है कि ओपी (सॉर्ट) ने यह स्पष्ट कर दिया है कि वह चाहता था कि संपत्ति आईडीकी की कार्यक्षमता रखे, लेकिन मुझे आईआरएडऑनली डिक्शनरी से अनजान था और इसकी आवश्यकता थी।+1 –

+0

'IReadOnlyDictionary' के लिए एक साधारण कलाकार पर्याप्त नहीं है यदि आप वास्तव में शब्दकोश की सामग्री में संशोधन को रोकना चाहते हैं, तो शब्दकोश में एक साधारण कास्ट वापस संशोधित करने की अनुमति देगा। आपको डिक्शनरी को रीडऑनली डिक्शनरी में लपेटना चाहिए, और रैपर को वापस करना चाहिए। – marapet

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