Checking if Two ValueTuple T1 are Equal or Not in C#

ValueTuple in C# is a structure used to represent a data structure that can hold more than one value of differing types. Introduced in C# 7.0, ValueTuples are a significant improvement over classic tuples as they provide semantic names to the fields and better performance. This article demonstrates how to compare two instances of ValueTuple to check if they are equal.

Understanding ValueTuple in C#

ValueTuple is a value type representation of the Tuple class. Unlike reference-type Tuples, ValueTuples are stored on the stack and allow you to create tuples with named fields, making your code more readable and self-descriptive.

ValueTuple Structure ValueTuple<int, string, bool> Item1: int Item2: string Item3: bool 1 "Hello" true All elements must match for equality

Here is an example of creating a ValueTuple

ValueTuple<int, string, bool> valueTuple = (1, "Hello", true);

Syntax

There are multiple ways to compare ValueTuples for equality

// Using == operator
bool isEqual = valueTuple1 == valueTuple2;

// Using Equals method
bool isEqual = valueTuple1.Equals(valueTuple2);

Using the == Operator

The most straightforward way to compare two ValueTuples is using the == operator. If all corresponding elements are equal, the ValueTuples are considered equal

using System;

public class Program {
   public static void Main() {
      ValueTuple<int, string, bool> valueTuple1 = (1, "Hello", true);
      ValueTuple<int, string, bool> valueTuple2 = (1, "Hello", true);
      ValueTuple<int, string, bool> valueTuple3 = (2, "World", false);

      Console.WriteLine("Comparing valueTuple1 and valueTuple2:");
      if (valueTuple1 == valueTuple2) {
         Console.WriteLine("ValueTuples are equal.");
      }
      else {
         Console.WriteLine("ValueTuples are not equal.");
      }

      Console.WriteLine("\nComparing valueTuple1 and valueTuple3:");
      if (valueTuple1 == valueTuple3) {
         Console.WriteLine("ValueTuples are equal.");
      }
      else {
         Console.WriteLine("ValueTuples are not equal.");
      }
   }
}

The output of the above code is

Comparing valueTuple1 and valueTuple2:
ValueTuples are equal.

Comparing valueTuple1 and valueTuple3:
ValueTuples are not equal.

Using the Equals Method

Alternatively, you can use the Equals method for ValueTuple comparison. This method provides the same functionality as the == operator

using System;

class Program {
   static void Main() {
      ValueTuple<int, string, bool> valueTuple1 = (1, "Hello", true);
      ValueTuple<int, string, bool> valueTuple2 = (1, "Hello", true);

      bool areEqual = valueTuple1.Equals(valueTuple2);

      Console.WriteLine("Using Equals method:");
      Console.WriteLine("ValueTuples equal: " + areEqual);

      // You can also use it directly in conditions
      if (valueTuple1.Equals(valueTuple2)) {
         Console.WriteLine("Confirmed: ValueTuples are equal using Equals method.");
      }
   }
}

The output of the above code is

Using Equals method:
ValueTuples equal: True
Confirmed: ValueTuples are equal using Equals method.

Named ValueTuples Comparison

ValueTuples can have named fields, but the comparison still works based on the values of the elements, not their names

using System;

class Program {
   static void Main() {
      var person1 = (Id: 1, Name: "John", IsActive: true);
      var person2 = (PersonId: 1, FullName: "John", Status: true);

      Console.WriteLine("Comparing named ValueTuples with different field names:");
      Console.WriteLine("person1 == person2: " + (person1 == person2));
      Console.WriteLine("person1.Equals(person2): " + person1.Equals(person2));

      Console.WriteLine("\nField values:");
      Console.WriteLine("person1: Id=" + person1.Id + ", Name=" + person1.Name + ", IsActive=" + person1.IsActive);
      Console.WriteLine("person2: PersonId=" + person2.PersonId + ", FullName=" + person2.FullName + ", Status=" + person2.Status);
   }
}

The output of the above code is

Comparing named ValueTuples with different field names:
person1 == person2: True
person1.Equals(person2): True

Field values:
person1: Id=1, Name=John, IsActive=True
person2: PersonId=1, FullName=John, Status=True

Comparison Rules

Comparison Method Description Performance
== Operator Element-wise comparison, returns true if all elements are equal Optimized by compiler
Equals Method Same logic as ==, but can be overridden if needed Slightly slower due to method call
Field Names Names are ignored during comparison, only values matter No impact on performance

Conclusion

ValueTuples in C# can be compared for equality using either the == operator or the Equals method. Both approaches compare the values of corresponding elements, and field names do not affect the comparison. ValueTuples are considered equal only when all their corresponding elements are equal.

Updated on: 2026-03-17T07:04:36+05:30

313 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements