El siguiente código funciona en la máquina de "todos", excepto en la mía:
var foo = "caa"; var bar = "ca"; if (foo.StartsWith(bar, false, CultureInfo.GetCultureInfo("no"))) Console.WriteLine($"{foo} starts with {bar}"); else { Console.WriteLine($"{foo} does not start with {bar}"); }Probé en .net 5.0.400, 5.0.403, 6.0.100 - todas las impresiones 'caa no comienzan con ca'. No he copiado los caracteres de ningún lado, literalmente los escribo.
Entiendo que esto es realmente solo en mi computadora, pero no entiendo por qué o qué está causando esto.
Editar: estoy en Windows 10 - OS Build: 19043.1348. nb-NO teclado, idioma de la interfaz de usuario de Windows en EE. UU.
Editar: Agregado si (foo.StartsWith(bar, false, CultureInfo.GetCultureInfo("no") - sin cambios en el comportamiento.
reproducción:
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("nb-NO"); var foo = "caa"; var bar = "ca"; if (foo.StartsWith(bar)) { Console.WriteLine($"{foo} starts with {bar}"); } else { Console.WriteLine($"{foo} does not start with {bar}"); }Desde .NET 5, la comparación de cadenas se realiza utilizando diferentes bibliotecas de comparación de cadenas (ICU) . En noruego, "aa" aparentemente no es lo mismo que "a" + "a". Consulte Cambios de comportamiento al comparar cadenas en .NET 5+ .
Comparar (gracias @Charlieface ):
Querrá una comparación ordinal (valor numérico de carácter):
foo.StartsWith(bar, StringComparison.Ordinal)