使用 KeyValuePair 作为字典的键:
它在功能上可以使用 KeyValuePair 作为字典中的键;但是,从概念上讲,这可能不是您的应用程序的最佳选择,因为它暗示了两个整数之间的键值关系。
相反,正如 Mike 建议的那样,您应该使用 Tuple 作为您的密钥。
对于第二个问题:
var myDictionary = new Dictionary<KeyValuePair<int,int>, string>();
myDictionary.Add(new KeyValuePair<int,int>(3, 3), "FirstItem");
myDictionary.Add(new KeyValuePair<int,int>(3, 3), "SecondItem");
// does the dictionary allow this?
字典不允许这样做,字典本身是一组键值对,其中键必须是唯一的。如果您希望能够将多个值映射到同一个键,一种选择是将值设置为另一个集合:
var myDictionary = new Dictionary<KeyValuePair<int,int>, List<string>>();
但是您仍然无法像示例中那样使用 myDictionary.Add 。相反,您必须提供额外的功能来确定它们的键是否是字典的一部分并采取相应的行动:
public static class DictionaryHelper
{
public static void Add(this Dictionary<Tuple<int,int>, List<string>> dict,Tuple<int,int> key, string value)
{
if(dict.ContainsKey(key))
{
dict[key].Add(value);
}
else
{
dict.Add(key, new List<string>{value});
}
}
}