How to compare two lists for equality in C#?

Comparing two lists for equality in C# can be done using several approaches. The most common methods include using SequenceEqual() for order-dependent comparison, Except() to find differences, and custom logic for specific comparison requirements.

Using SequenceEqual() for Order-Dependent Comparison

The SequenceEqual() method from LINQ compares two sequences element by element in the same order −

using System;
using System.Collections.Generic;
using System.Linq;

public class Demo {
   public static void Main() {
      List<string> list1 = new List<string> {"A", "B", "C"};
      List<string> list2 = new List<string> {"A", "B", "C"};
      List<string> list3 = new List<string> {"C", "B", "A"};
      
      Console.WriteLine("List1 equals List2: " + list1.SequenceEqual(list2));
      Console.WriteLine("List1 equals List3: " + list1.SequenceEqual(list3));
   }
}

The output of the above code is −

List1 equals List2: True
List1 equals List3: False

Using Except() to Find Differences

The Except() method returns elements that exist in the first list but not in the second, helping identify differences −

using System;
using System.Collections.Generic;
using System.Linq;

public class Demo {
   public static void Main() {
      List<string> list1 = new List<string> {"P", "Q", "R"};
      List<string> list2 = new List<string> {"P", "R"};
      
      Console.WriteLine("First list:");
      foreach(string value in list1) {
         Console.WriteLine(value);
      }
      
      Console.WriteLine("Second list:");
      foreach(string value in list2) {
         Console.WriteLine(value);
      }
      
      Console.WriteLine("Elements in first list but not in second:");
      var differences = list1.Except(list2);
      foreach(string value in differences) {
         Console.WriteLine(value);
      }
      
      // Check if lists are equal by comparing both directions
      bool areEqual = !list1.Except(list2).Any() && !list2.Except(list1).Any();
      Console.WriteLine("Lists are equal: " + areEqual);
   }
}

The output of the above code is −

First list:
P
Q
R
Second list:
P
R
Elements in first list but not in second:
Q
Lists are equal: False

Order-Independent Comparison Using Sets

For comparing lists regardless of order, convert them to HashSet collections and use SetEquals()

using System;
using System.Collections.Generic;
using System.Linq;

public class Demo {
   public static void Main() {
      List<string> list1 = new List<string> {"A", "B", "C"};
      List<string> list2 = new List<string> {"C", "A", "B"};
      List<string> list3 = new List<string> {"A", "B", "D"};
      
      var set1 = new HashSet<string>(list1);
      var set2 = new HashSet<string>(list2);
      var set3 = new HashSet<string>(list3);
      
      Console.WriteLine("List1 content equals List2 (order ignored): " + set1.SetEquals(set2));
      Console.WriteLine("List1 content equals List3 (order ignored): " + set1.SetEquals(set3));
      Console.WriteLine("List1 sequence equals List2: " + list1.SequenceEqual(list2));
   }
}

The output of the above code is −

List1 content equals List2 (order ignored): True
List1 content equals List3 (order ignored): False
List1 sequence equals List2: False

Comparison Methods

Method Order Matters Use Case
SequenceEqual() Yes Exact sequence comparison
Except() + Any() No Finding differences between lists
HashSet.SetEquals() No Content comparison ignoring order

Conclusion

C# provides multiple ways to compare lists: SequenceEqual() for exact order-dependent comparison, Except() to identify differences, and HashSet.SetEquals() for order-independent content comparison. Choose the method that best fits your specific equality requirements.

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

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements