我正在尝试创建一个在构造期间采用可变数量参数的结构,目的是将此对象用作字典键(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)
这是怎么回事?在结构中使用可变对象(如数组)是否存在问题?
自定义的默认相等和哈希代码实现struct将基于其成员的默认相等和哈希代码方法,在您的情况下是数组.该数组使用基于引用的标识,而不是基于值的标识.如果您希望具有相同值的不同数组相等,则需要覆盖Equals并GetHashCode依赖于数组的值.
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |