C# · Programowanie

String stringowi nierówny – czyli o porównywaniu napisów

Co zwykle robicie, gdy chcecie porównać jakieś stringi? Np. w takim języku, jak niemiecki?

[Fact]
[InlineData("Ë", "ë")]
public void StringComparerToLowerReturnsTrue(string input, string expected)
{
    var result = input.ToLower() == expected;
    Assert.True(result);
}

W powyższym przypadku test przejdzie. Ale okazuje się, że mogą być bardziej specyficzne przypadki, gdy dane słowo nie składa się z takich samych liter.

[Theory]
[InlineData("Straße", "STRASSE")]
public void StringComparerToLowerReturnsTrue(string input, string expected)
{
    var result = input.ToLower() == expected;
    Assert.True(result);
}

Test nie przechodzi. Spróbujmy inaczej:

[Theory]
[InlineData("Straße", "STRASSE")]
public void StringComparerToLowerInvariantReturnsTrue(string input, string expected)
{
    var result = input.ToLowerInvariant() == expected;
    Assert.True(result);
}

Ten test również nie przechodzi. Szukamy dalej rozwiązania.

[Theory]
[InlineData("Straße", "STRASSE")]
public void StringComparerToLowerWithInvariantCultureReturnsTrue(string input, string expected)
{
    var result = input.ToLower(CultureInfo.InvariantCulture) == expected;
    Assert.True(result);
}

Tutaj również nie działa poprawnie. Co zrobić?

Okazuje się, że jest jednak metoda, która zwróci prawidłową wartość. Jest to String.Equals() z parametrem StringComparison.InvariantCultureIgnoreCase.

[Theory]
[InlineData("Straße", "STRASSE")]
public void StringComparerWithInvariantCultureIgnoreCaseParameterReturnsTrue(string input, string expected)
{
    var result = String.Equals(input, expected, StringComparison.InvariantCultureIgnoreCase);
    Assert.True(result);
}

Jeśli chcesz poczytać jeszcze więcej o rekomendacjach w sprawie stringów, zachęcam do przeczytania dokumentacji.

2 myśli na temat “String stringowi nierówny – czyli o porównywaniu napisów

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Google

Komentujesz korzystając z konta Google. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s