元组实现

本文关键字:实现 元组 | 更新日期: 2023-09-27 18:33:01

抱歉,如果它是重复的。我找不到关于此事的完整解释。MSDN像往常一样含糊不清...

.Net 元组是否为等于和 GetHashCode 提供了开箱即用的可用实现?(因此 == 运算符)

我可以期望元组默认

比较它的所有项目,还是必须提供一个 IEqualityComparer,如此处所示的净元组和等于性能?

它能否可靠地用作字典键?

我进行了一个小测试:

Tuple<DateTime, string, int> test3 = new Tuple<DateTime, string, int>(DateTime.Now.Date, "1", 1);
Tuple<DateTime, string, int> test4 = new Tuple<DateTime, string, int>(DateTime.Now.Date, "1", 1);
Console.WriteLine(test3 == test4);
Console.WriteLine(test3.Equals(test4));
Console.ReadKey();

结果是假的和真的。我想实现了等于,但没有实现运算符。这是否意味着 == 运算符比较引用?另外,我找不到IEqualityComparer(框架版本4)的重载。

谢谢。

元组实现

查看文档,您可以看到:

  • GetHashCode被覆盖,尽管细节没有明确记录。(例如,它可以为所有实例返回 0。
  • Equals以有据可查的方式被覆盖,委托给组件类型的相等比较器。
  • ==运算符没有重载 - 所以是的,它将执行定期的引用-身份比较

尽管没有明确记录,但编译时组件类型必须相等,而不仅仅是执行时组件类型。所以例如:

var t1 = new Tuple<object, object>("foo", "bar");
var t2 = new Tuple<string, string>("foo", "bar");
Console.WriteLine(t1.Equals(t2)); // False