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.
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";
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]);
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.
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;
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.
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);
}
}
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 !
Vous voulez dire comme un sac de propriété?