String.CompareTo Metoda

Definicja

Porównuje to wystąpienie z określonym obiektem lub String zwraca liczbę całkowitą wskazującą, czy to wystąpienie poprzedza, następuje lub pojawia się w tej samej kolejności sortowania co określony obiekt lub String.

Przeciążenia

CompareTo(Object)

Porównuje to wystąpienie z określonym Object wystąpieniem i wskazuje, czy to wystąpienie poprzedza, następuje lub pojawia się w tej samej pozycji w kolejności sortowania co określony Object.

CompareTo(String)

Porównuje to wystąpienie z określonym String obiektem i wskazuje, czy to wystąpienie poprzedza, następuje lub pojawia się w tej samej pozycji w kolejności sortowania co określony ciąg.

Uwagi

Oba przeciążenia CompareTo metody wykonują porównanie uwzględniające kulturę i wielkość liter. Nie można użyć tej metody do przeprowadzania porównań niewrażliwych na kulturę lub porządkowych. W celu zapewnienia przejrzystości kodu zalecamy uniknięcie CompareTo metody i wywołanie Compare metody.

CompareTo(Object)

Źródło:
String.Comparison.cs
Źródło:
String.Comparison.cs
Źródło:
String.Comparison.cs

Porównuje to wystąpienie z określonym Object wystąpieniem i wskazuje, czy to wystąpienie poprzedza, następuje lub pojawia się w tej samej pozycji w kolejności sortowania co określony Object.

public int CompareTo(object? value);
public int CompareTo(object value);

Parametry

value
Object

Obiekt, który oblicza wartość .String

Zwraca

32-bitowa liczba całkowita z podpisem wskazująca, czy to wystąpienie poprzedza, następuje, czy pojawia się w tej samej pozycji w kolejności sortowania co value parametr.

Wartość Warunek
Mniej niż zero To wystąpienie poprzedza value.
Zero To wystąpienie ma tę samą pozycję w kolejności sortowania co value.
Większe od zera To wystąpienie jest następujące: value.

-lub-

value to null.

Implementuje

Wyjątki

value nie jest elementem String.

Przykłady

W poniższym przykładzie użyto CompareTo metody z elementem Object. Ponieważ próbuje porównać String wystąpienie z obiektem TestClass , metoda zgłasza błąd ArgumentException.

using System;

public class TestClass
{}

public class Example
{
   public static void Main()
   {
      var test = new TestClass();
      Object[] objectsToCompare = { test, test.ToString(), 123,
                                    123.ToString(), "some text",
                                    "Some Text" };
      string s = "some text";
      foreach (var objectToCompare in objectsToCompare) {
         try {
            int i = s.CompareTo(objectToCompare);
            Console.WriteLine("Comparing '{0}' with '{1}': {2}",
                              s, objectToCompare, i);
         }
         catch (ArgumentException) {
            Console.WriteLine("Bad argument: {0} (type {1})",
                              objectToCompare,
                              objectToCompare.GetType().Name);
         }
      }
   }
}
// The example displays the following output:
//    Bad argument: TestClass (type TestClass)
//    Comparing 'some text' with 'TestClass': -1
//    Bad argument: 123 (type Int32)
//    Comparing 'some text' with '123': 1
//    Comparing 'some text' with 'some text': 0
//    Comparing 'some text' with 'Some Text': -1

Uwagi

value musi być obiektem String .

Przestroga

Metoda została zaprojektowana CompareTo głównie do użycia w operacjach sortowania lub alfabetyzowania. Nie należy jej używać, gdy głównym celem wywołania metody jest określenie, czy dwa ciągi są równoważne. Aby określić, czy dwa ciągi są równoważne, wywołaj metodę Equals .

Ta metoda przeprowadza porównanie wyrazów (wielkość liter i z uwzględnieniem ustawień kulturowych) przy użyciu bieżącej kultury. Aby uzyskać więcej informacji na temat sortowania wyrazów, ciągów i porządkowych, zobacz System.Globalization.CompareOptions.

Aby uzyskać więcej informacji na temat zachowania tej metody, zobacz sekcję Uwagi metody String.Compare(String, String) .

Uwagi dotyczące wywoływania

Zestawy znaków obejmują znaki do pominięcia. Metoda CompareTo(Object) nie uwzględnia takich znaków podczas przeprowadzania porównania wrażliwego na kulturę. Jeśli na przykład poniższy kod jest uruchamiany w .NET Framework 4 lub nowszym, porównanie "zwierzę" z "ani-mal" (przy użyciu łącznika miękkiego lub U+00AD) wskazuje, że dwa ciągi są równoważne.

using System;

public class Example
{
   public static void Main()
   {
      string s1 = "ani\u00ADmal";
      object o1 = "animal";
      
      Console.WriteLine("Comparison of '{0}' and '{1}': {2}", 
                        s1, o1, s1.CompareTo(o1));
   }
}
// The example displays the following output:
//       Comparison of 'ani-mal' and 'animal': 0

Aby rozpoznać ignorowane znaki w porównaniu ciągu, wywołaj metodę CompareOrdinal(String, String) .

Zobacz też

Dotyczy

.NET 10 i inne wersje
Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

CompareTo(String)

Źródło:
String.Comparison.cs
Źródło:
String.Comparison.cs
Źródło:
String.Comparison.cs

Porównuje to wystąpienie z określonym String obiektem i wskazuje, czy to wystąpienie poprzedza, następuje lub pojawia się w tej samej pozycji w kolejności sortowania co określony ciąg.

public int CompareTo(string strB);
public int CompareTo(string? strB);

Parametry

strB
String

Ciąg do porównania z tym wystąpieniem.

Zwraca

32-bitowa liczba całkowita z podpisem wskazująca, czy to wystąpienie poprzedza, następuje, czy pojawia się w tej samej pozycji w kolejności sortowania co strB parametr.

Wartość Warunek
Mniej niż zero To wystąpienie poprzedza strB.
Zero To wystąpienie ma tę samą pozycję w kolejności sortowania co strB.
Większe od zera To wystąpienie jest następujące: strB.

-lub-

strB to null.

Implementuje

Przykłady

W poniższym przykładzie CompareTo użyto metody do porównania bieżącego wystąpienia ciągu z innym ciągiem.

using System;

public class Example
{
   public static void Main()
   {
      string strFirst = "Goodbye";
      string strSecond = "Hello";
      string strThird = "a small string";
      string strFourth = "goodbye";

      // Compare a string to itself.
      Console.WriteLine(CompareStrings(strFirst, strFirst));

      Console.WriteLine(CompareStrings(strFirst, strSecond));
      Console.WriteLine(CompareStrings(strFirst, strThird));

      // Compare a string to another string that varies only by case.
      Console.WriteLine(CompareStrings(strFirst, strFourth));
      Console.WriteLine(CompareStrings(strFourth, strFirst));
   }

   private static string CompareStrings( string str1, string str2 )
   {
      // Compare the values, using the CompareTo method on the first string.
      int cmpVal = str1.CompareTo(str2);

       if (cmpVal == 0) // The strings are the same.
         return "The strings occur in the same position in the sort order.";
      else if (cmpVal < 0)
         return "The first string precedes the second in the sort order.";
      else
         return "The first string follows the second in the sort order.";
    }
}
// The example displays the following output:
//       The strings occur in the same position in the sort order.
//       The first string precedes the second in the sort order.
//       The first string follows the second in the sort order.
//       The first string follows the second in the sort order.
//       The first string precedes the second in the sort order.

W poniższym przykładzie przedstawiono ogólne i niegeneryczne wersje metody CompareTo dla kilku typów wartości i odwołań.

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Uwagi

Ta metoda przeprowadza porównanie wyrazów (wielkość liter i z uwzględnieniem ustawień kulturowych) przy użyciu bieżącej kultury. Aby uzyskać więcej informacji na temat sortowania wyrazów, ciągów i porządkowych, zobacz System.Globalization.CompareOptions.

Przestroga

Metoda została zaprojektowana CompareTo głównie do użycia w operacjach sortowania lub alfabetyzowania. Nie należy jej używać, gdy głównym celem wywołania metody jest określenie, czy dwa ciągi są równoważne. Aby określić, czy dwa ciągi są równoważne, wywołaj metodę Equals .

Aby uzyskać więcej informacji na temat zachowania tej metody, zobacz sekcję Uwagi metody Compare(String, String) .

Ta metoda implementuje System.IComparable<T> interfejs i działa nieco lepiej niż String.CompareTo(Object) metoda, ponieważ nie musi określać, czy strB argument jest typem wartości modyfikowalnej, który musi być polecony, i nie musi rzutować parametru z elementu ObjectStringna .

Uwagi dotyczące wywoływania

Zestawy znaków obejmują znaki do pominięcia. Metoda CompareTo(String) nie uwzględnia takich znaków podczas przeprowadzania porównania wrażliwego na kulturę. Jeśli na przykład poniższy kod jest uruchamiany w .NET Framework 4 lub nowszym, porównanie "zwierzę" z "ani-mal" (przy użyciu łącznika miękkiego lub U+00AD) wskazuje, że dwa ciągi są równoważne.

using System;

public class Example
{
   public static void Main()
   {
      string s1 = "ani\u00ADmal";
      string s2 = "animal";
      
      Console.WriteLine("Comparison of '{0}' and '{1}': {2}", 
                        s1, s2, s1.CompareTo(s2));
   }
}
// The example displays the following output:
//       Comparison of 'ani-mal' and 'animal': 0

Aby rozpoznać ignorowane znaki w porównaniu ciągu, wywołaj metodę CompareOrdinal(String, String) .

Zobacz też

Dotyczy

.NET 10 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0