私はC#でアプリケーションを作成しています。そのアプリケーションでは、私は1000,2000,3000などのような別のポートからデータを取得している辞書ランタイムを作成したい。ここで私はDictionary1000、Dictionary2000、Dictionary3000などのような名前でランタイムを作成したいが、私は午前それをすることはできません。私を助けてください。 ありがとうございます。C#で辞書にランタイム名を付けるには?
1
A
答えて
8
2
public class NamedDictionary<TKey,TValue> : Dictionary<TKey,TValue> {
public string Name {get;set;}
}
...?
3
この種のアプローチはあまり実用的ではありません。なぜ辞書の辞書を使用しないのですか?ような何か:
Dictionary<int, Dictionary<SomeType,SomeOtherType>>
ので、あなたはまた、複合キーを保持している新しいタイプを作成することによって問題を解決することができ、質問
+0
本当に便利です – Dany
1
の各ポートに対して辞書を格納することができます。
public class PortDictionary
{
private Dictionary<CompositeKey, MyValueType> _store = new Dictionary<CompositeKey, MyValueType>();
public void Add(int port, MyKeyType key, MyValueType value)
{
_store.Add(new CompositeKey(port, key), value);
}
public void Remove(int port, MyKeyType key)
{
_store.Remove(new CompositeKey(port, key));
}
public bool TryGet(int port, MyKeyType key, out MyValueType value)
{
return _store.TryGetValue(new CompositeKey(port, key), out value);
}
private class CompositeKey : IEquatable<CompositeKey>
{
private int _port;
private MyKeyType _key;
public CompositeKey(int port, MyKeyType key)
{
_port = port;
_key = key;
}
#region IEquatable<IdentityKey> Members
public bool Equals(CompositeKey other)
{
if (_port != other._port) {
return false;
}
return _key == other._key;
}
#endregion
public override int GetHashCode()
{
return _port.GetHashCode()^_key.GetHashCode();
}
}
}
この実装では、複合キーはポート辞書内に隠されているローカルクラスです。複合キーはIEquatable <>を実装する必要があり、辞書のキーとして使用できるようにGetHashCode()をオーバーライドする必要があります。 、物事を簡単にするトリック
var dict = new PortDictionary();
dict.Add(3000, myKey, myValue);
//Retrieve
if (dict.TryGet(3000, myKey, out myValue)) {
Console.WriteLine("Value = {0}", myValue);
} else {
Console.WriteLine("No value found for port {0} and key {1}", 3000, myKey);
}
0
[]これを上書きすることである:ここで
は、このポートの辞書を使用する方法の一例である
public class InnerDictionary : Dictionary<int, string>
{
}
public class OuterDictionary : Dictionary<int, InnerDictionary>
{
public new InnerDictionary this[int key]
{
get
{
if (!base.ContainsKey(key))
{
base.Add(key, new InnerDictionary());
}
return base[key];
}
set { throw new NotSupportedException("Message"); }
}
}
関連する問題
- 1. C#名前付き/ラベル付きの型を持つ辞書
- 2. タグ付け辞書データ
- 3. OAuth - Cでの辞書順バイト値の順序付け
- 4. C#でExcelに辞書を書く
- 5. C#サービスでランタイムにWindowsサービス名を取得するには?
- 6. 辞書のキーに値を結び付けて印刷する
- 7. Djangoのviews.pyのテンプレートタグを辞書に関連付ける
- 8. 複数の件名接頭辞にformat-patchを付ける
- 9. C#辞書内の辞書
- 10. Objective C + Reskit - 書式設定の問題を避けるために、辞書にキーを付けるにはどうすればよいですか?
- 11. ウェブページの投稿のランタイム辞書
- 12. Obj-Cのランタイムで構造体をオブジェクトに関連付ける方法
- 13. 辞書をpythonで辞書に変換するには?
- 14. c#辞書でTryGetValueだけを使用するとスレッドセーフです。
- 15. C#辞書でオートコンプリート
- 16. 条件付き辞書のPython辞書
- 17. ダウンロードファイルに名前を付けるには
- 18. テストに名前を付けるには?
- 19. スレッドに名前を付けるには?
- 20. Objective-C:辞書内の辞書を取得する方法は?
- 21. 辞書にデータを挿入する[C#]
- 22. Python辞書をC++に翻訳する
- 23. DataTableを辞書Cに変換する#
- 24. 辞書をテキストファイルに保存する(C#)
- 25. 辞書を辞書にロード
- 26. 辞書をPythonで辞書に保存
- 27. 自分でアイテムに名前を付ける(C#)
- 28. は、辞書的にC++が11
- 29. MongoDB - 辞書で辞書の配列を検索するには
- 30. Objective-Cランタイム:Swizzledメソッド名?
について、あなたは何辞書を話しています? –
申し訳ありませんダニー、あなたの質問を理解することは難しいです。たぶん私たちにいくつかのコードを説明するのに役立つだろうか? –
ここで私の辞書は辞書に似ていますが、その特定のポートから受信したデータを保存しています。簡単に区別するために、辞書名の名前にポート番号を追加します。 –
Dany