意外的元组不等式
c#
c#-8.0
我正在使用 .net core 3.1 / C# 8.0。我有两个元组,我希望它们具有相等的值,但是运行时返回不等式。我的期望有什么问题?
Tuple<decimal, double> firstTuple;
Tuple<decimal, double> secondTuple;
测试:
bool tuplesEqualInValue = (firstTuple == secondTuple);
屏幕截图显示每个项目的firstTuple
和secondTuple
保持相同的值。然而第一个测试返回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.Tuple
using的平等性.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
重载==
)