私は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. タグ付け辞書データ
- 2. OAuth - Cでの辞書順バイト値の順序付け
- 3. C#でExcelに辞書を書く
- 4. 複数の件名接頭辞にformat-patchを付ける
- 5. ウェブページの投稿のランタイム辞書
- 6. Objective C + Reskit - 書式設定の問題を避けるために、辞書にキーを付けるにはどうすればよいですか?
- 7. 条件付き辞書のPython辞書
- 8. Python辞書をC++に翻訳する
- 9. DataTableを辞書Cに変換する#
- 10. 辞書付きドットプロダクト
- 11. C#辞書LINQ
- 12. ActionScript辞書C#
- 13. ソート辞書 - C#
- 14. 接頭辞に+ =を付けたもの
- 15. C#で辞書とユーティリティを作るには?
- 16. URLでファイルに名前を付ける
- 17. Objective-Cランタイム:Swizzledメソッド名?
- 18. すべてのLiferayテーブルの既定のテーブル名に接頭辞を付ける
- 19. C#辞書はHashSetの
- 20. C#で配列インデックスに名前を付けることはできますか?
- 21. NullReferenceException C#で辞書を追加する
- 22. グループディクショナリ辞書キー(C#)
- 23. ユニコードのキー付き辞書
- 24. objective-cのブロックに名前を付ける?
- 25. Python MySQLdb:名前付き辞書としてのクエリパラメータ
- 26. 名前付きエンティティPythonの個人辞書からの認識
- 27. すべてのURLに仮想フォルダ名の接頭辞を付けます
- 28. C#マルチレベル辞書に基づくクラス
- 29. MySQLでワイルドカード選択列に名前を付けるには?
- 30. Pythonで - ネストされた辞書の最大日付を見つける
について、あなたは何辞書を話しています? –
申し訳ありませんダニー、あなたの質問を理解することは難しいです。たぶん私たちにいくつかのコードを説明するのに役立つだろうか? –
ここで私の辞書は辞書に似ていますが、その特定のポートから受信したデータを保存しています。簡単に区別するために、辞書名の名前にポート番号を追加します。 –
Dany