Игнорировать акцентные буквы при сравнении строк в Visual Studio

Я новичок в Visual Studio и пытаюсь освоить несколько простых задач. Мне дали код, который сравнивает две строки (фамилия и имя)

    private bool compareNames(String value1, String value2)
    {
        if (value1 != null && value2 != null && value1.Trim().ToLower(). Equals(value2.Trim().ToLower()))
        {
            return true;
        }

        return false;
    }

Приведенный выше код игнорирует регистр, но я пытаюсь также игнорировать специальные символы, такие как ăîşéááö.

Я пытался выполнить эту задачу с помощью Normalize(), но, похоже, это не сработало.

    private bool compareNames(String value1, String value2)
    {
        if (value1 != null && value2 != null && value1.Trim().ToLower(). Equals(value2.Trim().ToLower()))
        {
            return true;
        }
        else if (value1 != null && value2 != null && value1.Trim().Normalize().Equals(value2.Trim().Normalize()))
        {
            return true;
        }

        return false;
    }

Любая помощь приветствуется!


person asphy1    schedule 12.10.2016    source источник
comment
Вы пробовали решение здесь - stackoverflow.com/questions/20674577/?   -  person Wiktor Stribiżew    schedule 12.10.2016
comment
Спасибо за ваш ответ. Я пробовал это еще раз, если (value1 != null && value2 != null && value1.Trim().Normalize(NormalizationForm.FormKD).Equals(value2.Trim().Normalize(NormalizationForm.FormKD))) { вернуть истину; } Но это тоже не работает.   -  person asphy1    schedule 12.10.2016
comment
Я имею в виду подход RemoveDiacritics.   -  person Wiktor Stribiżew    schedule 12.10.2016
comment
О, спасибо, пропустил эту часть. Я прочитал несколько подобных сообщений и в итоге нашел решение выше. Но это сработало с подходом RemoveDiacritics.   -  person asphy1    schedule 12.10.2016


Ответы (1)


Один из возможных ответов — использовать подход RemoveDiacritcs.

static string RemoveDiacritics(string text) 
{
    var normalizedString = text.Normalize(NormalizationForm.FormD);
    var stringBuilder = new StringBuilder();

    foreach (var c in normalizedString)
    {
        var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
        if (unicodeCategory != UnicodeCategory.NonSpacingMark)
        {
            stringBuilder.Append(c);
        }
    }

    return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
}

Дополнительная информация здесь: Как удалить диакритические знаки ( акценты) из строки в .NET?

person Valentin Michalak    schedule 12.10.2016