using System.Collections.Generic;
using System.Text.RegularExpressions;
public static void Main()
bool isEqualInvariant = string.Equals(str1, str2, StringComparison.InvariantCultureIgnoreCase);
bool isEqualOrdinal = string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase);
bool toLowerInvariantCheck = str1.ToLowerInvariant() == str2.ToLowerInvariant();
bool isEqualCaseAndAccentInvariantCheck = NormaliseCaseAndAccents(str1) == NormaliseCaseAndAccents(str2);
Console.WriteLine("InvariantCultureIgnoreCase: " + isEqualInvariant);
Console.WriteLine("OrdinalIgnoreCase: " + isEqualOrdinal);
Console.WriteLine("ToLowerInvariant: " + toLowerInvariantCheck);
Console.WriteLine("ToLowerInvariant: " + isEqualCaseAndAccentInvariantCheck);
string normalisedStr2 = NormaliseCaseAndAccents(str2);
Console.WriteLine("Collection check: " + NormaliseCaseAndAccents(new[] { "code 1", "code 2", str1 }).Any(existing => existing == normalisedStr2));
private static string NormaliseCaseAndAccents(string value)
return NormaliseCaseAndAccents(new[] {value}).First();
private static IEnumerable<string> NormaliseCaseAndAccents(IEnumerable<string> values)
var accentMap = new(string Anglo, string Accents)[]
}.Where(a => values.Any(v => Regex.Match(v, $"[{a.Accents}]").Success));
return values.Select(v =>
foreach (var m in accentMap)
v = Regex.Replace(v, $"[{m.Accents}]", m.Anglo);
return v.ToLowerInvariant();