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.


Podoba Ci się to, co tworzę? Chcesz dostawać informacje o:
– wydarzeniach, które organizuję lub wspieram (np. konferencje, meetupy, webinary)
– inicjatywach, które organizuję lub wspieram (np. GeekWeekWro, DevAdventCalendar)
– moich prelekcjach, kursach i szkoleniach
– wyróżnionych artykułach z mojego bloga

0% SPAMu, 100% informacji! Krótko i na temat.

2 uwagi do wpisu “String stringowi nierówny – czyli o porównywaniu napisów

Dodaj komentarz