我们目前正在将一个应用程序从.Net Framework4.8更新到.NET6,有一件事让我感到困惑:

"MyString".StartsWith("\x01");

在.Net框架中,这将返回FALSE.正如我所期望的那样,因为字符串的第一个字符不是'\x01'

但在.NET6(也已经有.NET5)中,这是真的吗?我们找不到任何关于这种行为为什么会改变的解释,你知道我们可以参考什么资源吗?

我们发现,这可以通过使用new重载StartsWith(char)来解决,而不是使用带有字符串参数的(old?)重载.

升级路径不会自动替换那些,所以我预计行为也会相同.

推荐答案

这是因为.NET从使用NLS更改为ICU,并且默认情况下对StartsWith(string)执行区域性感知比较.有一些背景的变化,在.NET runtime repository.

考虑使用序数比较:

"MyString".StartsWith("\x01", StringComparison.Ordinal);

它会达到你所期望的效果.

Csharp相关问答推荐

List T.AddRange在传递ConcurrentDictionary作为参数时引发ArgumentExcellent

如何告诉自己创建的NuGet包在应用程序中发生了变化?

`Task`只有在C#中等待时才会运行吗?

如果存在对CodeAnalysis.CSharp的引用,则不能引用netStandard2.0库

如何在没有额外副本的情况下将存储在IntPtr下的原始图像数据写入WinUI3中的Image控件?

如何在C#中使用Postman中的本地IP向本地主机上运行的本地API发出请求

C#阻塞调用或await calling inside calling方法

如何将MongoDB序列化程序设置为内部对象属性

在.NET 7.0 API控制器项目中通过继承和显式调用基类使用依赖项注入

如何比较C#中的L和ł(波兰字符)返回TRUE

具有可空类型的C#NOTNULL约束具有意外行为

在C#中有没有办法减少大型数组中新字符串的分配?

为什么我的伺服电机不动,下面的代码?

Azure函数正在返回值列表,但该列表在Chrome中显示为空

如何在绑定到数据库的datagridview中向上或向下移动行

如何在Cake脚本中设置MSBuild.exe的绝对路径

无效的Zip文件-Zip存档

ASP.NET Core 8 Web API:如何添加版本控制?

外部应用&&的LINQ;左外部连接&类似于PostgreSQL的查询

异步等待,如何在Windows窗体中使用它们?