gpt4 book ai didi

c# - 不同平台上的 string.StartsWith 不一致

转载 作者:太空狗 更新时间:2023-10-29 20:26:29 30 4
gpt4 key购买 nike

string.StartsWith 和此代码段(针对 .net core 2.x)的文档:

This method compares the value parameter to the substring at the beginning of this string that is the same length as value, and returns a value that indicates whether they are equal. To be equal, value must be an empty string (String.Empty), must be a reference to this same instance, or must match the beginning of this instance. This method performs a comparison using the specified casing and culture.
https://learn.microsoft.com/en-us/dotnet/api/system.string.startswith?view=netcore-2.1

static void Main(string[] args)
{
var unicodeCtrl = "\u0000";
var str = "x";
Console.WriteLine($"Is it empty => {unicodeCtrl == string.Empty}");
Console.WriteLine($"Lenghts => {str.Length} {unicodeCtrl.Length}");
Console.WriteLine($"Are they equal => {str == unicodeCtrl}");
Console.WriteLine($"Are they ref eq => {Object.ReferenceEquals(str, unicodeCtrl)}");
Console.WriteLine($"Contains => {str.Contains(unicodeCtrl)}");
Console.WriteLine($"Starts with => {str.StartsWith(unicodeCtrl)}");
}

它在 Windows 上产生预期的结果:

Is it empty     => False  Lenghts         => 1 1Are they equal  => False  Are they ref eq => False  Contains        => False  Starts with     => False

但是在 Linux 上运行时(通过 docker)结果是:

Is it empty     => FalseLenghts         => 1 1Are they equal  => FalseAre they ref eq => FalseContains        => FalseStarts with     => True

你会认为这是一个错误吗?
平台依赖行为?

请注意,我不是在问如何让它工作(更改为 str.StartsWith(unicodeCtrl,StringComparison.OrdinalIgnoreCase))但如果您认为这是有意/正确的行为。

编辑:我尝试在 Linux 上匹配我的本地语言环境,但没有任何区别。我尝试了默认的 C (en-US-POSIX) 和 pl_PL.UTF8

最佳答案

这是 Windows 和 Linux/Unix 之间的一个已知差异:在 Unix 平台上,空值没有“权重”。此处 .NET 的行为是按设计来匹配平台期望,而不是提供一致性。如果您希望空值“计数”,则必须使用序数比较。

参见此处:https://github.com/dotnet/coreclr/issues/2051#issuecomment-277005422

这里:https://github.com/dotnet/corefx/pull/29935/files#diff-91724393075e1a7718d3521655506742R1399

关于c# - 不同平台上的 string.StartsWith 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52395504/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com