意外的元组不等式

c#

c#-8.0

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

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

测试:

bool tuplesEqualInValue = (firstTuple == secondTuple);

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

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

/sf/answers/3093602501/

/sf/answers/354884421/

回答

您的前两个链接谈论的是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

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


以上是意外的元组不等式的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>