C#コードの例を紹介したり、クラスのプロパティとしてディクショナリが使用されているコードを提供したりすることはできますか。プロパティとしての.NETディクショナリ
これまで見た例では、ディクショナリをプロパティとして宣言し、辞書に要素を追加、削除、取得する方法をすべてカバーしていません。
C#コードの例を紹介したり、クラスのプロパティとしてディクショナリが使用されているコードを提供したりすることはできますか。プロパティとしての.NETディクショナリ
これまで見た例では、ディクショナリをプロパティとして宣言し、辞書に要素を追加、削除、取得する方法をすべてカバーしていません。
は、ここでは簡単な例
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";
あなたは財産袋のような意味ですか?
サンプルコード:
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]);
私はIDictionaryを
ok、プロパティを変更しました –
例...
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);
}
}
また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"];
EDIT明らか
を行くことによって、それは情報のアクセスができ、これがなければなりませんMyClass
は辞書ではないため、ラッパークラス用に辞書メソッドを実装しない限り、辞書メソッドは使用できません。しかし、インデクサーは特定の状況では素晴らしいツールです。
のみ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}
}
この構造体は、値を置き換えるために使用することができます。
カプセル化が正しいこと、およびAddまたはForm ExampleDictionary [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;
私はOP(種類)を知っているので、彼はIDictionaryの機能を持つことをプロパティに要求しましたが、私はIReadOnlyDictionaryを認識せず、必要としていました。+1 –
ディクショナリのコンテンツの変更を本当に防止したい場合、 'IReadOnlyDictionary'への単純なキャストは十分ではありません。 DictionaryをReadOnlyDictionaryにラップし、ラッパーを返す必要があります。 – marapet
うん "42"は "生命、宇宙、そしてすべての究極の質問への回答"です。 – Equiman