我有以下代码行:
\nString.Equals("strasse", "stra\xc3\x9fe", StringComparison.InvariantCultureIgnoreCase)\nRun Code Online (Sandbox Code Playgroud)\n在.net 4.7.2中,这返回 true。
\n在 .net 5 (和.net 6)中,这将返回 false。
为什么?
\n我目前正在学习 C# 中比较字符串的工作原理。网。并遇到了一个我不完全理解的意外结果。
\n当使用重载方法String.Equals(string,string,Stringcomparison) 将 string :"strasse"和 string :"stra\xc3\x9fe"与以下 Stringcomparison 进行比较时:
Console.WriteLine(String.Equals("strasse", "stra\xc3\x9fe", StringComparison.OrdinalIgnoreCase));\nConsole.WriteLine(String.Equals("strasse", "stra\xc3\x9fe", StringComparison.CurrentCultureIgnoreCase));\nConsole.WriteLine(String.Equals("strasse", "stra\xc3\x9fe", StringComparison.InvariantCultureIgnoreCase));\nRun Code Online (Sandbox Code Playgroud)\n我得到以下结果:
\nFalse \nFalse\nFalse\nRun Code Online (Sandbox Code Playgroud)\n我预计第一行返回 false,但第二行和第三行都返回 true。\n我首先考虑的是我的 CurrentCulture 可能是问题所在,所以可以肯定的是,将 CurrentCulture 和 CurrentUICulture 都设置为:
\nCultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");\nCultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("de-DE");\nRun Code Online (Sandbox Code Playgroud)\n我是否错误地理解了字符串比较?或者我在这里遗漏了一些明显的东西?
\n预先感谢任何愿意帮助我理解的人
\n