C#Struct字典键不能与数组成员一起使用

roo*_*kie 0 c# struct

我正在尝试创建一个在构造期间采用可变数量参数的结构,目的是将此对象用作字典键(Tuple我的.Net版本不支持该类型):

struct TupleKey
{
    int[] args;
    public TupleKey(params int[] args) { this.args = args; }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我将其struct用作字典的键时,该ContainsKey方法返回false.

var d = new Dictionary<TupleKey, int>();
d.Add(new TupleKey(1, 1), 1);
Console.WriteLine(d.ContainsKey(new TupleKey(1,1)));  // false!?
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?在结构中使用可变对象(如数组)是否存在问题?

Ser*_*rvy 5

自定义的默认相等和哈希代码实现struct将基于其成员的默认相等和哈希代码方法,在您的情况下是数组.该数组使用基于引用的标识,而不是基于值的标识.如果您希望具有相同值的不同数组相等,则需要覆盖EqualsGetHashCode依赖于数组的值.