比较c#中的两个字符串是否相等,InvariantCulture和Ordinal比较之间有什么区别?
我对 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 …Run Code Online (Sandbox Code Playgroud) 当我在 .NET Core 3.1 中运行以下代码时,我得到6了返回值。
// .NET Core 3.1
string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n");
Console.WriteLine(idx);
Run Code Online (Sandbox Code Playgroud)
结果:
6
Run Code Online (Sandbox Code Playgroud)
但是当我在 .NET 5.0 中运行这段代码时,我得到了不同的结果。为什么会发生这种情况?
6
Run Code Online (Sandbox Code Playgroud)
结果:
-1
Run Code Online (Sandbox Code Playgroud)