Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unexpected Tuple inequality

Tags:

c#

c#-8.0

I am using .net core 3.1 / C# 8.0. I have two tuples where I expect to have equal values, however the runtime returns inequality. What is wrong with my expectation?

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

Testing with:

bool tuplesEqualInValue = (firstTuple == secondTuple);

The screenshot shows that the values of firstTuple and secondTuple hold the same values for each item. Yet the first test returns false.

enter image description here

Documentation and other SO posts imply to me that the test should return true: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-7.3/tuple-equality

https://stackoverflow.com/a/44194321/10340388

https://stackoverflow.com/a/5069777/10340388

like image 998
Superman.Lopez Avatar asked Sep 19 '25 20:09

Superman.Lopez


1 Answers

The first two of your links talks about 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.

The third link talks about the equality of System.Tuple using .Equals, but you are using ==. If you had used .Equals to compare them, you would see that they are indeed equal:

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

Using == doesn't work because unlike, say, string, System.Tuple doesn't overload the == operator, so the default behaviour of comparing the references is used. (string overloads ==)

like image 185
Sweeper Avatar answered Sep 22 '25 12:09

Sweeper