c# - 字典键不能用作 Tuple<int[], int> 类型

标签 c# dictionary

我遇到这样一种情况,我需要一个包含这种类型键的字典,但后来似乎找不到等效的键。

Dictionary<Tuple<int[], int>, object> cache = new Dictionary<Tuple<int[], int>, object>();

cache.Add(Tuple.Create(new int[]{1}, 1), new object());

Assert.That(cache.ContainsKey(Tuple.Create(new int[] { 1 }, 1))); // This fails

我已经使用 Tuple<int, int> 对其进行了测试它似乎工作正常,但就我而言,我真的需要某种 Tuple<int[], int>使用那种类型的 key ,它不起作用。

还有其他可行的替代方法吗?

最佳答案

数组不可比较。例如:

var array1 = new int[] { 1 };
var array2 = new int[] { 1 };
Debug.WriteLine(array1 == array2); // this returns false
Debug.WriteLine(Object.Equals(array1, array2)) // this returns false

您需要做以下两件事之一:

1) 替换int[]使用实现必要 Equals 的自定义类和 GetHashCode覆盖。

2) 编写一个实现 IEqualityComparer<Tuple<int[], int>> 的类.该类将提供 EqualsGetHashCode Tuple<int[], int> 的方法秒。向您的 Dictionary<Tuple<int[], int>, object> 提供该类的一个实例

关于c# - 字典键不能用作 Tuple<int[], int> 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22721796/

相关文章:

c# - 有条件地改变目标框架版本

c# - Prism:区域停用时出现 InvalidOperationException。 "Deactivation is not possible in this type of region."

python - 如何从python中的两个列表中创建字典列表

java - 3 维列表或 map

javascript - 遍历嵌套数组并返回互斥结果

c# - 与谷歌日历双向同步

c# - NUnit 3.0 ExpectedResult 始终为空

swift - Swift 中的映射函数将 String 转换为 Int?

c# - 如何将 C# 字符转换为其十六进制代码表示形式

python - 合并到保留不同值的字典