The following code works on "everyones" machine, except for mine:
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}");
}
I've tried in on .net 5.0.400, 5.0.403, 6.0.100 - all prints 'caa does not start with ca'. I've not copied the chars from anywhere, I literally type them out.
I understand that this is really just on my computer, but I do not understand why or what is causing this.
Edit: I'm on Windows 10 - OS Build: 19043.1348. nb-NO keyboard, en-US Windows UI language.
Edit: Added if (foo.StartsWith(bar, false, CultureInfo.GetCultureInfo("no") - no change in behavior.
The following example determines whether a string occurs at the beginning of another string. The StartsWith method is called several times using case sensitivity, case insensitivity, and different cultures that influence the results of the search.
Repro:
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}");
}
Since .NET 5, string comparison is done using different string comparison libraries (ICU). In Norwegian, "aa" apparently isn't the same as "a" + "a". See Behavior changes when comparing strings on .NET 5+.
Compare (thanks @Charlieface):
You'll want an ordinal (character numeric value) comparison:
foo.StartsWith(bar, StringComparison.Ordinal)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With