using System.Collections.Generic;
public static class Program
var source = new string[]
"Red", "red", "blue", "green", "green", "red", "red", "yellow",
"WHITE", "white", "red", "white", "white"
var result = source.ExcludeConsecutiveDuplicates(StringComparer.OrdinalIgnoreCase);
Console.WriteLine($"Result: {String.Join(", ", result)}");
public static IEnumerable<TSource> ExcludeConsecutiveDuplicates<TSource>(
this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer = null)
ArgumentNullException.ThrowIfNull(source);
comparer ??= EqualityComparer<TSource>.Default;
(TSource Value, bool HasValue) previous = default;
foreach (var item in source)
bool isDuplicate = previous.HasValue && comparer.Equals(previous.Value, item);
if (!isDuplicate) yield return item;