【问题标题】:c# CompareTo() Methodc# CompareTo() 方法
【发布时间】:2024-11-30 02:55:01
【问题描述】:

我试图理解 C# 中的 CompareTo(),而下面的示例让我比以往任何时候都更加困惑。有人可以帮我理解为什么第三个变体的结果是 1 吗?句子“Hello wordd”中的第二个单词与 str1“Hello world”不同,那为什么我得到 1?我不应该得到-1吗?

static void Main(string[] args)
    {
        string str1 = "Hello world";
        Console.WriteLine(str1.CompareTo("Hello World"));
        Console.WriteLine(str1.CompareTo("Hello world"));
        Console.WriteLine(str1.CompareTo("Hello wordd"));

    }

结果:-1、0、1

【问题讨论】:

  • 是什么让你认为你应该得到-1?这表明“Hello world”应该在排序列表中出现在“Hellow wordd”之前,这对我来说似乎很奇怪。
  • 必读:documentation

标签: c# string methods


【解决方案1】:

如果字符串匹配,则 CompareTo() 给出 0。如果它们不匹配,它会给出一个正数或负数,具体取决于哪个字符串按字母顺序排在第一位。

在您的示例中,结果 1 和 -1 都表示字符串不匹配,而 0 表示字符串匹配。

看起来您正在使用它来确定相等性而不是排序。如果是这种情况,那么您应该改用Equals()

【讨论】:

  • 嗯,它给出一个正数或负数取决于哪个先出现。你永远不应该假设结果总是 -1、0 或 1。
  • 在这种情况下 -1 和 1 是否同样为假?
  • @ProgLog “同样错误”是什么意思?
  • 我的意思是两者都不正确。
  • 是的,结果1和-1都表示两个字符串不匹配。
【解决方案2】:

String.CompareTo 方法将此实例与指定的objectString 进行比较,并返回一个integer,指示此实例是否在前面。

  • 如果返回值小于零:此实例先于值。

  • 如果返回值为:此实例在排序顺序中与值具有相同的位置

  • 如果返回值大于零:此实例遵循值。 -要么- 值为空。

【讨论】: