我在c#中申请。在那个应用程序中我想创建字典运行时间。这里我从不同的端口获取数据,如1000,2000,3000等。这里我想创建字典运行时间的名称为Dictionary1000,Dictionary2000,Dictionary3000等。但我是不能这样做。请帮我。 提前致谢。
答案 0 :(得分:8)
永远不要为索引编制变量名称。使用字典字典。
答案 1 :(得分:3)
这种方法不太实用。为什么不使用字典词典?类似的东西:
Dictionary<int, Dictionary<SomeType,SomeOtherType>>
因此您可以针对每个有问题的端口存储字典
答案 2 :(得分:2)
public class NamedDictionary<TKey,TValue> : Dictionary<TKey,TValue> {
public string Name {get;set;}
}
...
答案 3 :(得分: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&lt;&gt;并且必须覆盖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);
}
答案 4 :(得分: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"); }
}
}