我在使用List作为Dictionary()的键时遇到了一些问题。下面是一个说明问题的示例代码:
Dictionary<List<double>, string> test = new Dictionary<List<double>, string>();
var a = new List<double>() { 1.0 };
var b = new List<double>() { 2.0 };
test.Add(a, "A");
test.Add(b, "B");
// Works because the reference is the same
Console.WriteLine(test[a]);
// KeyNotFoundException
Console.WriteLine(test[new List<double>() { 1.0 }]);
我知道出现错误的原因是字典正在使用列表的引用而不是列表的内容。如果TKey是一个List,最好使用SequenceEquals来确定键是否存在。
有什么想法可以解决这个问题吗?还有其他可以使用的集合吗?我必须创建一个新的包装类SequenceDictionary吗?
IList
(使用List
),并重写Equals
和GetHashCode
方法。 - L.Bvar c = new List<double>() { 1.0 };
然后test[c]
,异常仍然会被抛出,因为虽然c={1.0}
,但是c
有一个不同的引用。 - Mark