SequenceEqual

Determines whether two sequences are equal by comparing the elements of the two sequences.

static bool SequenceEqual<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)
static bool SequenceEqual<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)

Parameters

Name Type Description
first IEnumerable<TSource> The first sequence to compare.
second IEnumerable<TSource> The second sequence to compare.
comparer IEqualityComparer<TSource> An IEqualityComparer<TSource> to compare elements. If null, the default equality comparer is used.

Returns

bool: true if the two sequences are equal; otherwise, false.

Remarks

Two sequences are considered equal if they have the same number of elements, and all corresponding elements in the two sequences are equal, as determined by the default equality comparer for their type or by an explicitly provided IEqualityComparer<TSource>.

This method uses deferred execution.

Example

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

public class SequenceEqualExample
{
    public static void Main(string[] args)
    {
        List<int> numbers1 = new List<int> { 1, 2, 3, 4, 5 };
        List<int> numbers2 = new List<int> { 1, 2, 3, 4, 5 };
        List<int> numbers3 = new List<int> { 1, 2, 3, 5, 4 };
        List<int> numbers4 = new List<int> { 1, 2, 3, 4 };

        // Compare two identical sequences
        bool areEqual1 = numbers1.SequenceEqual(numbers2);
        Console.WriteLine($"numbers1 and numbers2 are equal: {areEqual1}"); // Output: numbers1 and numbers2 are equal: True

        // Compare sequences with different order
        bool areEqual2 = numbers1.SequenceEqual(numbers3);
        Console.WriteLine($"numbers1 and numbers3 are equal: {areEqual2}"); // Output: numbers1 and numbers3 are equal: False

        // Compare sequences with different lengths
        bool areEqual3 = numbers1.SequenceEqual(numbers4);
        Console.WriteLine($"numbers1 and numbers4 are equal: {areEqual3}"); // Output: numbers1 and numbers4 are equal: False

        // Example with custom comparer (case-insensitive string comparison)
        List<string> words1 = new List<string> { "apple", "Banana", "Cherry" };
        List<string> words2 = new List<string> { "apple", "banana", "cherry" };

        bool areEqualCaseInsensitive = words1.SequenceEqual(words2, StringComparer.OrdinalIgnoreCase);
        Console.WriteLine($"words1 and words2 are equal (case-insensitive): {areEqualCaseInsensitive}"); // Output: words1 and words2 are equal (case-insensitive): True
    }
}