평가 및 의견을 보내려면 클릭하십시오.
MSDN
MSDN Library
.NET 개발
.NET Framework 3.5
.NET Framework
.NET Framework 클래스 라이브러리
System 네임스페이스
IComparable 인터페이스
IComparable 메서드
 CompareTo 메서드

  저대역폭 보기 설정
이 페이지에서 다루는 특정 제품:.
Microsoft Visual Studio 2008/.NET Framework 3.5

다음 제품들은 다른 버전에서 다루어 집니다.
.NET Framework 클래스 라이브러리
IComparable..::.CompareTo 메서드

업데이트: 2008년 7월

현재 인스턴스와 동일한 형식의 다른 개체를 비교하고 정렬 순서에서 현재 인스턴스의 위치가 다른 개체보다 앞인지, 뒤인지 또는 동일한지를 나타내는 정수를 반환합니다.

네임스페이스:  System
어셈블리:  mscorlib(mscorlib.dll)
Visual Basic(선언)
Function CompareTo ( _
    obj As Object _
) As Integer
Visual Basic (사용법)
Dim instance As IComparable
Dim obj As Object
Dim returnValue As Integer

returnValue = instance.CompareTo(obj)
C#
int CompareTo(
    Object obj
)
Visual C++
int CompareTo(
    Object^ obj
)
J#
int CompareTo(
    Object obj
)
JScript
function CompareTo(
    obj : Object
) : int

매개 변수

obj
형식: System..::.Object
이 인스턴스와 비교할 개체입니다.

반환 값

형식: System..::.Int32
비교되는 개체의 상대 순서를 나타내는 부호 있는 32비트 정수입니다. 반환 값에는 다음과 같은 의미가 있습니다.

의미

음수

이 인스턴스는 obj보다 작습니다.

0

이 인스턴스는 obj와 같습니다.

양수

이 인스턴스는 obj보다 큽니다.

예외상황
ArgumentException

obj가 이 인스턴스와 같은 형식이 아닌 경우

CompareTo는 값의 순서를 지정하거나 값을 정렬할 수 있는 형식에서 구현합니다. 제네릭이 아닌 컬렉션 개체의 Array..::.Sort와 같은 메서드는 이 메서드를 자동으로 호출하여 배열의 각 멤버 순서를 지정합니다. 사용자 지정 클래스나 구조체에서 IComparable을 구현하지 않으면 해당 멤버의 순서를 지정할 수 없으며 정렬 작업에서 InvalidOperationException이 throw될 수 있습니다.

이 메서드는 정의일 뿐이며 특정 클래스 또는 값 형식에 의해 구현되어야만 효과가 있습니다. "작음", "같음" 및 "큼"과 같은 비교의 의미는 특정 구현에 따라 달라집니다.

정의에 따르면 모든 개체는 nullNothingnullptrNull 참조(Visual Basic의 경우 Nothing)보다 큰 것으로 간주되고 두 개의 null 참조는 서로 같은 것으로 간주됩니다.

매개 변수 obj는 이 인터페이스를 구현하는 클래스 또는 값 형식과 같은 형식이어야 합니다. 그렇지 않으면 ArgumentException이 throw됩니다.

구현자 참고 사항:

개체 A, B 및 C에 대해 다음 조건이 충족되어야 합니다.

A.CompareTo(A)는 0을 반환해야 합니다.

A.CompareTo(B)가 0을 반환하면 B.CompareTo(A)는 0을 반환해야 합니다.

A.CompareTo(B)가 0을 반환하고 B.CompareTo(C)가 0을 반환하면 A.CompareTo(C)는 0을 반환해야 합니다.

A.CompareTo(B)가 0이 아닌 값을 반환하면 B.CompareTo(A)는 반대 부호의 값을 반환해야 합니다.

A.CompareTo(B)가 0이 아닌 값 x를 반환하고 B.CompareTo(C)x와 같은 부호의 값 y를 반환하면 A.CompareTo(C)xy와 같은 부호의 값을 반환해야 합니다.

호출자 참고 사항:

CompareTo 메서드를 사용하여 클래스의 인스턴스의 순서를 결정합니다.

다음 코드 예제에서는 CompareTo를 사용하여 IComparable을 구현하는 Temperature 개체를 다른 개체와 비교하는 방법을 보여 줍니다. Temperature 개체는 Int32..::.CompareTo 메서드에 대한 호출을 래핑하여 CompareTo를 구현합니다.

Visual Basic
Imports System.Collections

Public Class Temperature
    Implements IComparable
    ' The temperature value
    Protected temperatureF As Double

    Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
        Implements IComparable.CompareTo

        If TypeOf obj Is Temperature Then
            Dim otherTemperature As Temperature = DirectCast(obj, Temperature)
            Return Me.temperatureF.CompareTo(otherTemperature.temperatureF)
        Else
           Throw New ArgumentException("Object is not a Temperature")
        End If   
    End Function

    Public Property Fahrenheit() As Double
        Get
            Return temperatureF
        End Get
        Set(ByVal Value As Double)
            Me.temperatureF = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (temperatureF - 32) * (5/9)
        End Get
        Set(ByVal Value As Double)
            Me.temperatureF = (Value * 9/5) + 32
        End Set
    End Property
End Class

Public Module CompareTemperatures
   Public Sub Main()
      Dim temperatures As New ArrayList
      ' Initialize random number generator.
      Dim rnd As New Random()

      ' Generate 10 temperatures between 0 and 100 randomly.
      For ctr As Integer = 1 To 10
         Dim degrees As Integer = rnd.Next(0, 100)
         Dim temp As New Temperature
         temp.Fahrenheit = degrees
         temperatures.Add(temp)   
      Next

      ' Sort ArrayList.
      temperatures.Sort()

      For Each temp As Temperature In temperatures
         Console.WriteLine(temp.Fahrenheit)
      Next      
   End Sub
End Module
' The example displays the following output to the console (individual
' values may vary because they are randomly generated):
'       2
'       7
'       16
'       17
'       31
'       37
'       58
'       66
'       72
'       95

C#
using System;
using System.Collections;

public class Temperature : IComparable 
{
    // The temperature value
    protected double temperatureF;

    public int CompareTo(object obj) {
        if(obj is Temperature) 
        {
            Temperature otherTemperature = (Temperature) obj;
            return this.temperatureF.CompareTo(otherTemperature.temperatureF);
        }
        else
        {
           throw new ArgumentException("Object is not a Temperature");
        }    
    }

    public double Fahrenheit 
    {
        get 
        {
            return this.temperatureF;
        }
        set {
            this.temperatureF = value;
        }
    }

    public double Celsius 
    {
        get 
        {
            return (this.temperatureF - 32) * (5/9);
        }
        set 
        {
            this.temperatureF = (value * 9/5) + 32;
        }
    }
}

public class CompareTemperatures
{
   public static void Main()
   {
      ArrayList temperatures = new ArrayList();
      // Initialize random number generator.
      Random rnd = new Random();

      // Generate 10 temperatures between 0 and 100 randomly.
      for (int ctr = 1; ctr <= 10; ctr++)
      {
         int degrees = rnd.Next(0, 100);
         Temperature temp = new Temperature();
         temp.Fahrenheit = degrees;
         temperatures.Add(temp);   
      }

      // Sort ArrayList.
      temperatures.Sort();

      foreach (Temperature temp in temperatures)
         Console.WriteLine(temp.Fahrenheit);

   }
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95

Visual C++
using namespace System;
using namespace System::Collections;

public ref class Temperature: public IComparable {
   /// <summary>
   /// IComparable.CompareTo implementation.
   /// </summary>
protected:
   // The value holder
   Double m_value;

public:
   virtual Int32 CompareTo( Object^ obj ) {
      if ( obj->GetType() == Temperature::typeid ) {
         Temperature^ temp = dynamic_cast<Temperature^>(obj);

         return m_value.CompareTo( temp->m_value );
      }
      throw gcnew ArgumentException(  "object is not a Temperature" );
   }

   property Double Value {
      Double get() {
         return m_value;
      }
      void set( Double value ) {
         m_value = value;
      }
   }

   property Double Celsius  {
      Double get() {
         return (m_value - 32) / 1.8;
      }
      void set( Double value ) {
         m_value = (value * 1.8) + 32;
      }
   }
};

int main()
{
   ArrayList^ temperatures = gcnew ArrayList;
   // Initialize random number generator.
   Random^ rnd = gcnew Random;

   // Generate 10 temperatures between 0 and 100 randomly.
   for (int ctr = 1; ctr <= 10; ctr++)
   {
      int degrees = rnd->Next(0, 100);
      Temperature^ temp = gcnew Temperature;
      temp->Value = degrees;
      temperatures->Add(temp);
   }

   // Sort ArrayList.
   temperatures->Sort();

   for each (Temperature^ temp in temperatures)
      Console::WriteLine(temp->Value);
   return 0;
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

.NET Framework

3.5, 3.0, 2.0, 1.1, 1.0에서 지원

.NET Compact Framework

3.5, 2.0, 1.0에서 지원

XNA Framework

2.0, 1.0에서 지원

날짜

변경 내용

원인

2008년 7월

공용 언어 런타임에서 사용하는 방법에 대한 세부 정보가 추가되었습니다.

고객 의견

커뮤니티 콘텐츠   커뮤니티 콘텐츠란?
새 콘텐츠 추가 RSS  주석
Processing
© 2009 Microsoft Corporation. All rights reserved. 사용약관  |  상표  |  개인정보보호
Page view tracker