При сравнении "Île" и "Ile", C# не полагает, что это, чтобы быть тем же.
string.Equals("Île", "Ile", StringComparison.InvariantCultureIgnoreCase)
Для всех других символов с диакритикой я столкнулся со сравнением, хорошо работает.
Есть ли другая функция сравнения, которую я должен использовать?
Вы указываете сравнить строки, используя правила сравнения инвариантной культуры. Очевидно, в инвариантной культуре эти две строки не считаются равными.
Вы можете сравнить их в зависимости от культуры, используя String.Compare и указав культуру, для которой вы хотите сравнить строки:
if(String.Compare("Île", "Ile", new CultureInfo("fr-FR"), CompareOptions.None)==0)
Обратите внимание, что во французской культуре эти строки также считаются разными. Я включил этот пример, чтобы показать, что именно культура определяет правила сортировки. Возможно, вы сможете найти культуру, соответствующую вашим требованиям, или создать собственную культуру с необходимыми правилами сравнения, но это, вероятно, не то, что вам нужно.
Для хорошего примера нормализации строки, чтобы не было акцентов, посмотрите этот вопрос. После нормализации строки вы сможете сравнить их и считать равными. Это, вероятно, самый простой способ реализовать ваше требование.
Не только символ I имеет такое поведение в InvariantCulture, это утверждение также возвращает false:
String.Equals("Ilê", "Ile", StringComparison.InvariantCultureIgnoreCase)
Фреймворк поступает правильно - эти символы на самом деле разные (имеют разное значение) в большинстве культур, и поэтому их не следует считать одинаковыми.