当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"时它正常工作。
请问有人能解决这个问题吗?