意外的元组不等式

Sup*_*pez 3 c# c#-8.0

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

Tuple<decimal, double> firstTuple;
Tuple<decimal, double> secondTuple;
Run Code Online (Sandbox Code Playgroud)

测试:

bool tuplesEqualInValue = (firstTuple == secondTuple);
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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

/sf/answers/3093602501/

/sf/answers/354884421/

Swe*_*per 5

您的前两个链接谈论的是System.ValueTuple,这不是您在此处使用的内容 ( System.Tuple),因此它们与此问题无关。但是,如果您使用的是支持它们的 C# 版本,请考虑改用使用ValueTuple这是一个开始

第三个链接讨论System.Tupleusing的平等性.Equals,但您正在使用==. 如果您曾经.Equals比较过它们,您会发现它们确实相等:

var firstTuple = Tuple.Create(217930.7650m, 670.556);
var secondTuple = Tuple.Create(217930.7650m, 670.556);
Console.WriteLine(firstTuple.Equals(secondTuple)); // True
Run Code Online (Sandbox Code Playgroud)

使用==不工作,因为不像,说,stringSystem.Tuple不超载的==操作,所以比较引用的默认行为被使用。(string重载==