【发布时间】:2022-07-08 01:46:28
【问题描述】:
我对 Visual Studio 2022、C# 10 和 .NET 6.0 的发布感到非常兴奋,并下载并安装了社区版并测试了我正在从事的项目。我将目标框架更改为 6.0 并执行了干净的构建。太好了,一切都按预期构建。
因此,不断向上运行该项目。第一次测试失败了。我必须说我很惊讶。我开始四处挖掘,发现 .NET Core 3.1 和 .NET 6.0 之间存在差异,我感到非常惊讶。
这是一个示例程序:
public class Program
{
public static readonly string CTCPDelimiterString = "\x0001";
public static readonly char CTCPDelimiterChar = '\x0001';
public static void Main(string[] args)
{
string text = "!sampletext";
Console.Write(" Using a char: ");
if (text.StartsWith(CTCPDelimiterChar) && text.EndsWith(CTCPDelimiterChar))
{
Console.WriteLine("got CTCP delimiters");
}
else
{
Console.WriteLine("did not get CTCP delimiters");
}
Console.Write("Using a string: ");
if (text.StartsWith(CTCPDelimiterString) && text.EndsWith(CTCPDelimiterString))
{
Console.WriteLine("got CTCP delimiters");
}
else
{
Console.WriteLine("did not get CTCP delimiters");
}
}
}
使用“netcoreapp3.1”的目标框架,我得到以下输出:
Using a char: did not get CTCP delimiters
Using a string: did not get CTCP delimiters
使用“net6.0”的目标框架,我得到以下输出:
Using a char: did not get CTCP delimiters
Using a string: got CTCP delimiters
所以,我只能假设它是一个 unicode 设置,但我在任何地方都找不到它(如果有的话)。我的理解是所有字符串都是 UTF16 但为什么框架之间的差异。
是的,我可以在我的代码中看到错误,它应该是一个字符,但使用“netcoreapp3.1”可以正常工作。
谁能解释一下这个问题。
【问题讨论】:
-
事实上,在 .NET Core 5 中引入了一项重大更改(并且通过扩展,仍保留在 6 中),这会影响 Unicode 文本处理。你可以在这里阅读:docs.microsoft.com/en-us/dotnet/standard/base-types/…
-
@Alejandro 非常感谢您的链接。可怕的是我添加了推荐的规则更改,现在我有 138 个错误和 1813 个警告!我想我有一个喝咖啡和虫子的约会。 :)
-
还有this
标签: c# .net-6.0 visual-studio-2022 netcoreapp3.1