意外的元组不等式

Unexpected Tuple inequality

我使用的是.net core 3.1 / C# 8.0。我有两个元组,我希望它们具有相等的值,但是运行时 returns 不平等。我的期望有什么问题?

Tuple<decimal, double> firstTuple;
Tuple<decimal, double> secondTuple;

测试:

bool tuplesEqualInValue = (firstTuple == secondTuple);

屏幕截图显示 firstTuplesecondTuple 的值对每个项目都保持相同的值。然而第一个测试 returns false.

文档和其他 SO 帖子向我暗示测试应该 return truehttps://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-7.3/tuple-equality

你的前两个 link 谈论 System.ValueTuple, which is not what you are using here (System.Tuple), so they are rather irrelevant for this question. Though, if you are using a C# version that supports them, consider switching over to using ValueTuple instead. Here's a start

第三个link讲System.Tuple相等用.Equals,你用的是==。如果您使用 .Equals 来比较它们,您会发现它们确实相等:

var firstTuple = Tuple.Create(217930.7650m, 670.556);
var secondTuple = Tuple.Create(217930.7650m, 670.556);
Console.WriteLine(firstTuple.Equals(secondTuple)); // True

使用 == 不起作用,因为与 string 不同,System.Tuple 不会重载 == 运算符,因此比较使用参考。 (string overloads ==)