ValueTuples是否适合作为字典键?

Ste*_*lis 9 c# dictionary valuetuple

我想这可能是一个方便的字典:

var myDict = new Dictionary<(int, int), bool>();
Run Code Online (Sandbox Code Playgroud)

哈希会是什么样子?
等效键类型(struct)是什么样的?

Mar*_*ell 17

是的,没关系.该ValueTuple<...>族是一组明确定义的常规结构,具有正确的相等性和哈希码行为,可用作字典键.有一点需要注意的是,它们是可变的而不是不可变的,但是由于复制语义(这意味着:在添加密钥之后你不能更改密钥,因此你不会真正影响它们)只更改密钥的不同副本 ;这与可变类作为密钥的问题非常不同).你可以在这里看到代码.

  • 首先,他们使“ Tuple”不可变,但成为一个类,然后使“ ValueTuple”成为一个结构,但使其可变。 (2认同)
  • @Groo 确实如此,我认为这是一种有效且务实的做法;一个可变的类 `Tuple&lt;...&gt;` 家族会非常危险;一个可变的结构`ValueTuple&lt;...&gt;` 系列要安全得多,并且可以在不引起任何关键相等问题的情况下启用一些场景。我可能*更喜欢*它是不可变的(我爱我一些`只读结构`),但是......嗯,在这种情况下它是有道理的。 (2认同)