¿Cuál es la diferencia entre InvariantCulture y Ordinal al comparar cadenas en C#?
¡Hola a todos! Soy un desarrollador C# principiante y me he encontrado con un problema al comparar cadenas. En la documentación de Microsoft veo a menudo dos métodos: `String.Compare` con `StringComparison.InvariantCulture` y `StringComparison.Ordinal`. Pero no termino de entender cuál es la diferencia entre ellos y cuándo usar cada uno.
Por ejemplo, tengo 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 qué al usar `InvariantCulture` las cadenas se consideran iguales, pero con `Ordinal` no? ¡Si son cadenas diferentes! Y además: si solo comparo nombres de usuario o nombres de archivos, ¿qué opción debería elegir? He oído que `Ordinal` es más rápido, pero temo equivocarme y obtener errores con diferentes configuraciones regionales.