Использование left.ToUpper() == right.ToUpper()
- не лучший вариант для сравнения строк, по крайней мере, из-за проблем с производительностью.Я хочу реорганизовать (полностью сохраняя поведение!) Этот код во что-то эффективное, но не могу достичь полной эквивалентности для особого случая.
Итак, вот простой метод тестирования:
[TestCase("Strasse", "Straße", "tr-TR")]
[TestCase("İ", "i", "tr-TR")]
public void UsingToUpper_AndCurrentCultureIgnoreCase_AreSame(string left, string right, string culture)
{
// Arrange, Act
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture);
var toUpper = left.ToUpper() == right.ToUpper();
var stringComparison = left.Equals(right, StringComparison.CurrentCultureIgnoreCase);
// Assert
Assert.AreEqual(toUpper, stringComparison);
}
Я попробовал два варианта, StringComparison.CurrentCultureIgnoreCase
и StringComparison.OrdinalIgnoreCase
, оба из них не удалось (в разных случаях).
Итак, вопрос:
Есть ли способ сравнить две строки, без изменения регистра и полностью сохранить поведение ToUpper ()?