意外的元组不等式
Unexpected Tuple inequality
我使用的是.net core 3.1 / C# 8.0。我有两个元组,我希望它们具有相等的值,但是运行时 returns 不平等。我的期望有什么问题?
Tuple<decimal, double> firstTuple;
Tuple<decimal, double> secondTuple;
测试:
bool tuplesEqualInValue = (firstTuple == secondTuple);
屏幕截图显示 firstTuple
和 secondTuple
的值对每个项目都保持相同的值。然而第一个测试 returns false
.
文档和其他 SO 帖子向我暗示测试应该 return true
:
https://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 ==
)
我使用的是.net core 3.1 / C# 8.0。我有两个元组,我希望它们具有相等的值,但是运行时 returns 不平等。我的期望有什么问题?
Tuple<decimal, double> firstTuple;
Tuple<decimal, double> secondTuple;
测试:
bool tuplesEqualInValue = (firstTuple == secondTuple);
屏幕截图显示 firstTuple
和 secondTuple
的值对每个项目都保持相同的值。然而第一个测试 returns false
.
文档和其他 SO 帖子向我暗示测试应该 return true
:
https://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 ==
)