代码之家  ›  专栏  ›  技术社区  ›  Steinbitglis

ValueTuple是否适合用作字典键?

  •  4
  • Steinbitglis  · 技术社区  · 7 年前

    var myDict = new Dictionary<(int, int), bool>();
    

    散列是什么样子的?
    等效密钥类型(struct)是什么样的?

    2 回复  |  直到 7 年前
        1
  •  29
  •   Marc Gravell    7 年前

    是的,很好。这个 ValueTuple<...> family是一组定义良好的规则结构,具有正确的等式和哈希代码行为,可以用作字典键。有一个 轻微的 不同的副本 钥匙的位置;这是 非常 与可变类作为键的问题不同)。你可以看到 code here

        2
  •  3
  •   Nick    7 年前

    作为值类型,的哈希 ValueTuple

    如果值类型不重写GetHashCode,则ValueType.GetHashCode 基类的方法使用反射来计算哈希代码 基于类型字段的值。换句话说,值类型

    元组是可变的,但因为它们是可变的 按值复制 ,您可以将它们安全地用作字典键。问题可能是,如果使用元组类型的变量,请在中使用此变量 Dictionary.Add ,然后修改此变量,并尝试使用同一变量作为键从字典访问关联值。在这种情况下,你在字典里找不到它。

    MyStruct : struct
    {
        public int A;
        public int B;
    }