web-dev-qa-db-fra.com

Dictionnaire .NET en tant que propriété

Quelqu'un peut-il me montrer des exemples de code C # ou fournir du code, où un dictionnaire a été utilisé comme propriété pour une classe.

Les exemples que j'ai vus jusqu'à présent ne couvrent pas tous les aspects à savoir comment déclarer le dictionnaire comme propriété, ajouter, supprimer et récupérer les éléments du dictionnaire.

26
Anand Shah

Voici un exemple rapide

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

Quelques cas d'utilisation

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

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

utilisation de l'échantillon:

MyClass mc = new MyClass();

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

Console.WriteLine(mc.TheDictionary[2]);
16
Hans Kesting

Vous pouvez également examiner indexeurs . (documentation MSDN officielle ici )

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

Ensuite, une fois que vous avez rempli le dictionnaire en interne, vous pouvez accéder à ses informations en allant

MyClass myExample = new MyClass();

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

[~ # ~] modifier [~ # ~]

Évidemment, cela doit être utilisé avec précaution, car MyClass n'est PAS un dictionnaire, et vous ne pouvez pas utiliser de méthodes de dictionnaire dessus à moins que vous ne les implémentiez pour la classe wrapper. Mais les indexeurs sont un excellent outil dans certaines situations.

12
DevinB

Afin de garantir que l'encapsulation est correcte et que le dictionnaire ne peut pas être mis à jour en dehors de la classe en utilisant Add ou le formulaire ExampleDictionary [1] = "test", utilisez 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; }
    }
}

Le code suivant ne fonctionnera pas, ce qui n'est pas le cas si IDictionary est utilisé:

var example = new Example();
example.ExampleDictionary[1] = test;
4
user3202856

Un autre exemple d'utilisation d'un dictionnaire comme propriété statique avec uniquement l'accesseur get:

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

Cette structure peut être utilisée pour remplacer des valeurs.

2
Erik K.

Un exemple...

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);
    }
}
1
user110714

Depuis . Net 4.6 vous pouvez également définir un dictionnaire comme ceci:

private Dictionary<string,int> Values => new Dictionary<string, int>()
{
    { "Value_1", 1},
    { "Value_2", 2},
    { "Value_3", 3},
};

Il s'appelle membres à corps d'expression !

0
leon22

Vous voulez dire comme un sac de propriété?

http://www.codeproject.com/KB/recipes/propertybag.aspx

0
Radu094