Can C# CompareTo() and Compare() returns integers other than -1 and 1?

我想澄清三个问题:

  1. 这些方法返回的"相对"整数是否包括-11以外的其他数字?
  2. 在C#中,哪些字母在排序顺序中排在第一位:大写还是小写?
  3. 字母在C#中是否有一个固定的整数值,可以用来计算或交叉判断CompareTo()Compare()的返回值?

我的问题是基于这样一个事实:我访问过的每个网站都说C#CompareTo()Compare()方法都会比较两个字符串并返回如下值:

  1. 其中string1来自before string2,方法返回-1
  2. 其中string1来自after string2,方法返回1;并且,
  3. 如果string1string2相同,则方法返回0.

如果我只保留网站上的例子,我会得到相同的结果.然而,当我使用我自己的字符串时,CompareTo()Compare(),我得到不同的数字:不仅仅是-11,就像这个例子一样:

Console.WriteLine(String.Compare("Aloha!", "Hello!"));
Console.WriteLine(String.Compare("Hello!", "Aloha!"));
Console.WriteLine(String.Compare("Hello!", "Hello!"));

控制台输出

-7
7
0

推荐答案

结果只是负的、零的或正的;任何超出这一范围的值都是偶然的.在许多情况下,实现只使用整数减法,例如,return x - y;可能是完全兼容的实现.你不应该推断出除此之外的任何意思.例如,串比较器could在逐个字符的基础上执行此操作:

(pseudo-code, assumes same length)
for each c1 in s1, c2 in s2 // pairwise
  if (c1 != c2) return c1 - c2
return 0

就这样.

  1. 可以,但除了判断负/零/正之外,您不应该从值中推断出任何东西
  2. 取决于字符串比较器
  3. 取决于字符串比较器

Csharp相关问答推荐

.NET最小API映射将T参数列表为[FromQuery]

将修剪声明放入LINQ中

在C#中,DirectoryEntry返回空AuditRules集合,即使审计规则确实存在

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

S能够用DATETIME来计算,这有什么错呢?

UWP中的任务和界面

使用可信第三方的Iext8.Net pdf签名

在.NET核心项目中创建Startup.cs比在Program.cs中注册服务好吗?

ASP.NET配置kestrel以使用Windows证书存储中的HTTPS

持有者安全定义未显示在Swagger.NET 8中

当空判断结果赋给变量时,为什么会出现可能空异常警告的解引用?

我可以查看我们向应用程序洞察发送了多少数据吗?

源代码生成器:CS8795分部方法';Class1.GetS2(字符串)';必须有实现部分,因为它有可访问性修饰符?

获取混淆&Quot;模糊引用&Quot;错误

如何在单击按钮后多次异步更新标签

在ObservableCollection上使用[NotifyPropertyChangedFor()]源代码生成器不会更新UI

为什么我的属性即使没有显式地设置任何[必需]属性,也会显示验证?

读取测试项目中的应用程序设置

嵌套Blazor组件内的验证

如何在C#中用Serilog记录类路径、方法名和行编号