Avatar ·

Qual é a diferença entre InvariantCulture e Ordinal ao comparar strings em C#?

Olá a todos! Sou um desenvolvedor C# iniciante e me deparei com um problema de comparação de strings. Na documentação da Microsoft, vejo frequentemente dois métodos: `String.Compare` com `StringComparison.InvariantCulture` e `StringComparison.Ordinal`. Mas não entendo completamente qual é a diferença entre eles e quando usar cada um. Por exemplo, tenho este código: ```csharp string str1 = "Straße"; string str2 = "STRASSE"; bool result1 = string.Equals(str1, str2, StringComparison.InvariantCultureIgnoreCase); bool result2 = string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase); Console.WriteLine($"InvariantCulture: {result1}"); // True Console.WriteLine($"Ordinal: {result2}"); // False ``` Por que ao usar `InvariantCulture` as strings são consideradas iguais, mas com `Ordinal` não? Afinal, são strings diferentes! E mais: se estou apenas comparando logins de usuários ou nomes de arquivos, qual opção devo escolher? Ouvi dizer que `Ordinal` é mais rápido, mas tenho medo de errar e obter bugs com diferentes