.NET Dictionary as a Property

后端 未结 8 486
-上瘾入骨i
-上瘾入骨i 2021-02-02 08:30

Can someone point me out to some C# code examples or provide some code, where a Dictionary has been used as a property for a Class.

The examples I have seen so far don\'

相关标签:
8条回答
  • 2021-02-02 09:09

    Another example of using a dictionary as a static property with only the get accessor:

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

    This structure can be used to replace values.

    0 讨论(0)
  • 2021-02-02 09:11

    In order to ensure the encapsulation is correct and the dictionary cannot be updated outside the class using Add or the form ExampleDictionary[1]= "test", use 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; }
        }
    }
    

    The following code will not work, which is not the case if IDictionary is used:

    var example = new Example();
    example.ExampleDictionary[1] = test;
    
    0 讨论(0)
  • 2021-02-02 09:17

    Here's a quick example

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

    Some use cases

    var e = new Example();
    e.Map[42] = "The Answer";
    
    0 讨论(0)
  • 2021-02-02 09:23

    sample code:

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

    sample usage:

    MyClass mc = new MyClass();
    
    mc.TheDictionary.Add(1, "one");
    mc.TheDictionary.Add(2, "two");
    mc.TheDictionary.Add(3, "three");
    
    Console.WriteLine(mc.TheDictionary[2]);
    

    EDIT

    When you use C# version 6 or later, you can also use this:

    public class MyClass
    {
      // you don't need a constructor for this feature
    
      // no (public) setter so no-one can change the dictionary itself
      // it is set when creating a new instance of MyClass
      public IDictionary<int, string> TheDictionary { get; } = new Dictionary<int, string>();
    }
    
    0 讨论(0)
  • 2021-02-02 09:24

    An example...

    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);
        }
    }
    
    0 讨论(0)
  • 2021-02-02 09:25

    You could also look into indexers. (official MSDN documentation 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];
            }
        }
    }
    

    Then, once you have populated the dictionary internally, you can access it's information by going

    MyClass myExample = new MyClass();
    
    string turingBio = myExample["Turing, Alan"];
    

    EDIT

    Obviously, this has to be used carefully, because MyClass is NOT a dictionary, and you cannot use any dictionary methods on it unless you implement them for the wrapper class. But indexers are a great tool in certain situations.

    0 讨论(0)
提交回复
热议问题