Comparison<T> 대리자

정의

형식이 같은 두 개체를 비교하는 메서드를 나타냅니다.Represents the method that compares two objects of the same type.

generic <typename T>
public delegate int Comparison(T x, T y);
public delegate int Comparison<in T>(T x, T y);
type Comparison<'T> = delegate of 'T * 'T -> int
Public Delegate Function Comparison(Of In T)(x As T, y As T) As Integer 

형식 매개 변수

T

비교할 개체의 형식입니다.The type of the objects to compare.

매개 변수

x

비교할 첫 번째 개체입니다.The first object to compare.

y

비교할 두 번째 개체입니다.The second object to compare.

반환 값

Int32

다음 표와 같이 xy의 상대 값을 나타내는 부호 있는 정수입니다.A signed integer that indicates the relative values of x and y, as shown in the following table.

Value 의미Meaning
0보다 작음Less than 0 xy보다 작은 경우x is less than y.
00 xy와 같습니다.x equals y.
0보다 큼Greater than 0 xy보다 큰 경우x is greater than y.
상속
Comparison<T>

예제

다음 코드 예제에서는 합니다 Comparison<T> 사용 하 여 대리자를 Sort(Comparison<T>) 메서드 오버 로드 합니다.The following code example demonstrates the use of the Comparison<T> delegate with the Sort(Comparison<T>) method overload.

코드 예제에서는 문자열에 대 한 대체 비교 메서드를 정의 CompareDinosByLength합니다.The code example defines an alternative comparison method for strings, named CompareDinosByLength. 이 메서드는 다음과 같이 작동 합니다. 첫째, 비교 대상이 테스트 null되 고 null 참조는 null이 아닌 값으로 처리 됩니다.This method works as follows: First, the comparands are tested for null, and a null reference is treated as less than a non-null. 둘째, 문자열 길이 비교 하 고 더 긴 문자열인 큰 것으로 간주 됩니다.Second, the string lengths are compared, and the longer string is deemed to be greater. 셋째, 길이가 같으면 일반적인 문자열 비교가 됩니다.Third, if the lengths are equal, ordinary string comparison is used.

List<T> 문자열 생성 되어 특정 순서 없이 4 개의 문자열을 사용 하 여 채워집니다.A List<T> of strings is created and populated with four strings, in no particular order. 목록에는 빈 문자열 및 null 참조도 포함 됩니다.The list also includes an empty string and a null reference. 사용 하 여 정렬 된 목록이 표시 되는 Comparison<T> 나타내는 제네릭 대리자는 CompareDinosByLength 메서드를 다시 표시 합니다.The list is displayed, sorted using a Comparison<T> generic delegate representing the CompareDinosByLength method, and displayed again.

using namespace System;
using namespace System::Collections::Generic;

int CompareDinosByLength(String^ x, String^ y)
{
    if (x == nullptr)
    {
        if (y == nullptr)
        {
            // If x is null and y is null, they're
            // equal. 
            return 0;
        }
        else
        {
            // If x is null and y is not null, y
            // is greater. 
            return -1;
        }
    }
    else
    {
        // If x is not null...
        //
        if (y == nullptr)
            // ...and y is null, x is greater.
        {
            return 1;
        }
        else
        {
            // ...and y is not null, compare the 
            // lengths of the two strings.
            //
            int retval = x->Length.CompareTo(y->Length);

            if (retval != 0)
            {
                // If the strings are not of equal length,
                // the longer string is greater.
                //
                return retval;
            }
            else
            {
                // If the strings are of equal length,
                // sort them with ordinary string comparison.
                //
                return x->CompareTo(y);
            }
        }
    }
};

void Display(List<String^>^ list)
{
    Console::WriteLine();
    for each(String^ s in list)
    {
        if (s == nullptr)
            Console::WriteLine("(null)");
        else
            Console::WriteLine("\"{0}\"", s);
    }
};

void main()
{
    List<String^>^ dinosaurs = gcnew List<String^>();
    dinosaurs->Add("Pachycephalosaurus");
    dinosaurs->Add("Amargasaurus");
    dinosaurs->Add("");
    dinosaurs->Add(nullptr);
    dinosaurs->Add("Mamenchisaurus");
    dinosaurs->Add("Deinonychus");
    Display(dinosaurs);

    Console::WriteLine("\nSort with generic Comparison<String^> delegate:");
    dinosaurs->Sort(
        gcnew Comparison<String^>(CompareDinosByLength));
    Display(dinosaurs);

}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<String^> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */
using System;
using System.Collections.Generic;

public class Example
{
    private static int CompareDinosByLength(string x, string y)
    {
        if (x == null)
        {
            if (y == null)
            {
                // If x is null and y is null, they're
                // equal. 
                return 0;
            }
            else
            {
                // If x is null and y is not null, y
                // is greater. 
                return -1;
            }
        }
        else
        {
            // If x is not null...
            //
            if (y == null)
                // ...and y is null, x is greater.
            {
                return 1;
            }
            else
            {
                // ...and y is not null, compare the 
                // lengths of the two strings.
                //
                int retval = x.Length.CompareTo(y.Length);

                if (retval != 0)
                {
                    // If the strings are not of equal length,
                    // the longer string is greater.
                    //
                    return retval;
                }
                else
                {
                    // If the strings are of equal length,
                    // sort them with ordinary string comparison.
                    //
                    return x.CompareTo(y);
                }
            }
        }
    }

    public static void Main()
    {
        List<string> dinosaurs = new List<string>();
        dinosaurs.Add("Pachycephalosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("");
        dinosaurs.Add(null);
        dinosaurs.Add("Mamenchisaurus");
        dinosaurs.Add("Deinonychus");
        Display(dinosaurs);

        Console.WriteLine("\nSort with generic Comparison<string> delegate:");
        dinosaurs.Sort(CompareDinosByLength);
        Display(dinosaurs);

    }

    private static void Display(List<string> list)
    {
        Console.WriteLine();
        foreach( string s in list )
        {
            if (s == null)
                Console.WriteLine("(null)");
            else
                Console.WriteLine("\"{0}\"", s);
        }
    }
}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<string> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */
Imports System.Collections.Generic

Public Class Example

    Private Shared Function CompareDinosByLength( _
        ByVal x As String, ByVal y As String) As Integer

        If x Is Nothing Then
            If y Is Nothing Then 
                ' If x is Nothing and y is Nothing, they're
                ' equal. 
                Return 0
            Else
                ' If x is Nothing and y is not Nothing, y
                ' is greater. 
                Return -1
            End If
        Else
            ' If x is not Nothing...
            '
            If y Is Nothing Then
                ' ...and y is Nothing, x is greater.
                Return 1
            Else
                ' ...and y is not Nothing, compare the 
                ' lengths of the two strings.
                '
                Dim retval As Integer = _
                    x.Length.CompareTo(y.Length)

                If retval <> 0 Then 
                    ' If the strings are not of equal length,
                    ' the longer string is greater.
                    '
                    Return retval
                Else
                    ' If the strings are of equal length,
                    ' sort them with ordinary string comparison.
                    '
                    Return x.CompareTo(y)
                End If
            End If
        End If

    End Function

    Public Shared Sub Main()

        Dim dinosaurs As New List(Of String)
        dinosaurs.Add("Pachycephalosaurus")
        dinosaurs.Add("Amargasaurus")
        dinosaurs.Add("")
        dinosaurs.Add(Nothing)
        dinosaurs.Add("Mamenchisaurus")
        dinosaurs.Add("Deinonychus")
        Display(dinosaurs)

        Console.WriteLine(vbLf & "Sort with generic Comparison(Of String) delegate:")
        dinosaurs.Sort(AddressOf CompareDinosByLength)
        Display(dinosaurs)

    End Sub

    Private Shared Sub Display(ByVal lis As List(Of String))
        Console.WriteLine()
        For Each s As String In lis
            If s Is Nothing Then
                Console.WriteLine("(Nothing)")
            Else
                Console.WriteLine("""{0}""", s)
            End If
        Next
    End Sub
End Class

' This code example produces the following output:
'
'"Pachycephalosaurus"
'"Amargasaurus"
'""
'(Nothing)
'"Mamenchisaurus"
'"Deinonychus"
'
'Sort with generic Comparison(Of String) delegate:
'
'(Nothing)
'""
'"Deinonychus"
'"Amargasaurus"
'"Mamenchisaurus"
'"Pachycephalosaurus"

다음 예제에서는 합니다 Comparison<T> 컬렉션의 요소를 정렬 하는 대리자 CityInfo 개체입니다.The following example uses the Comparison<T> delegate to sort the elements of a collection of CityInfo objects. CityInfo 도시 및 해당 인구에 대 한 정보를 포함 하는 애플리케이션 정의 클래스가입니다.CityInfo is an application-defined class that contains information about a city and its population. 이 예제에서는 세 개의 메서드를 정의 CompareByName, CompareByPopulation, 및 CompareByNames, 순서 지정의 세 가지 방법으로 제공 하는 CityInfo 개체입니다.The example defines three methods, CompareByName, CompareByPopulation, and CompareByNames, that offer three different ways of ordering the CityInfo objects. 에 할당 된 각 메서드는 comparison 의 인수는 Array.Sort<T>(T[], Comparison<T>) 메서드.Each method is assigned to the comparison argument of the Array.Sort<T>(T[], Comparison<T>) method.

using System;

public class CityInfo
{
   string cityName;
   string countryName;
   int pop2010;
   
   public CityInfo(string name, string country, int pop2010)
   {
      this.cityName = name;
      this.countryName = country;
      this.pop2010 = pop2010;
   }
   
   public string City
   { get { return this.cityName; } } 
   
   public string Country
   { get { return this.countryName; } }

   public int Population
   { get { return this.pop2010; } }
   
   public static int CompareByName(CityInfo city1, CityInfo city2)
   { 
      return String.Compare(city1.City, city2.City);
   }
   
   public static int CompareByPopulation(CityInfo city1, CityInfo city2)
   {
      return city1.Population.CompareTo(city2.Population);
   }
   
   public static int CompareByNames(CityInfo city1, CityInfo city2)
   {
      return String.Compare(city1.Country + city1.City, city2.Country + city2.City);
   }      
}

public class Example
{
   public static void Main()
   {
      CityInfo NYC = new CityInfo("New York City", "United States of America", 8175133 );
      CityInfo Det = new CityInfo("Detroit", "United States of America", 713777);
      CityInfo Paris = new CityInfo("Paris", "France",  2193031);
      CityInfo[] cities = { NYC, Det, Paris };
      // Display ordered array.
      DisplayArray(cities);
      
      // Sort array by city name.
      Array.Sort(cities, CityInfo.CompareByName);
      DisplayArray(cities);
      
      // Sort array by population.
      Array.Sort(cities, CityInfo.CompareByPopulation);
      DisplayArray(cities);
      
      // Sort array by country + city name.
      Array.Sort(cities, CityInfo.CompareByNames);
      DisplayArray(cities);
   }
   
   private static void DisplayArray(CityInfo[] cities)
   {
      Console.WriteLine("{0,-20} {1,-25} {2,10}", "City", "Country", "Population");
      foreach (var city in cities)
         Console.WriteLine("{0,-20} {1,-25} {2,10:N0}", city.City, 
                           city.Country, city.Population);

      Console.WriteLine();
   }
}
// The example displays the following output:
//     City                 Country                   Population
//     New York City        United States of America   8,175,133
//     Detroit              United States of America     713,777
//     Paris                France                     2,193,031
//     
//     City                 Country                   Population
//     Detroit              United States of America     713,777
//     New York City        United States of America   8,175,133
//     Paris                France                     2,193,031
//     
//     City                 Country                   Population
//     Detroit              United States of America     713,777
//     Paris                France                     2,193,031
//     New York City        United States of America   8,175,133
//     
//     City                 Country                   Population
//     Paris                France                     2,193,031
//     Detroit              United States of America     713,777
//     New York City        United States of America   8,175,133
Public Class CityInfo
   Dim cityName As String
   Dim countryName As String
   Dim pop2010 As Integer
   
   Public Sub New(name As String, country As String, pop2010 As Integer)
      Me.cityName = name
      Me.countryName = country
      Me.pop2010 = pop2010
   End Sub
   
   Public ReadOnly Property City As String
      Get
         Return Me.cityName
      End Get
   End Property
   
   Public ReadOnly Property Country As String
      Get
         Return Me.countryName
      End Get
   End Property
   
   Public ReadOnly Property Population As Integer
      Get
         Return Me.pop2010
      End Get   
   End Property
   
   Public Shared Function CompareByName(city1 As CityInfo, city2 As CityInfo) As Integer
      Return String.Compare(city1.City, city2.City)
   End Function
   
   Public Shared Function CompareByPopulation(city1 As CityInfo, city2 As CityInfo) As Integer
      Return city1.Population.CompareTo(city2.Population)
   End Function
   
   Public Shared Function CompareByNames(city1 As CityInfo, city2 As CityInfo) As Integer
      Return String.Compare(city1.Country + city1.City, city2.Country + city2.City)
   End Function   
End Class

Module Example
   Public Sub Main()
      Dim NYC As New CityInfo("New York City", "United States of America", 8175133)
      Dim Det As New CityInfo("Detroit", "United States of America", 713777)
      Dim Paris As New CityInfo("Paris", "France", 2193031)
      Dim cities As CityInfo() = { NYC, Det, Paris }
      ' Display ordered array.
      DisplayArray(cities)
      
      ' Sort array by city name.
      Array.Sort(cities, AddressOf CityInfo.CompareByName)
      DisplayArray(cities)
      
      ' Sort array by population.
      Array.Sort(cities, AddressOf CityInfo.CompareByPopulation)
      DisplayArray(cities)
      
      ' Sort array by country + city name.
      Array.Sort(cities, AddressOf CityInfo.CompareByNames)
      DisplayArray(cities)
   End Sub
   
   Private Sub DisplayArray(cities() As CityInfo)
      Console.WriteLine("{0,-20} {1,-25} {2,10}", "City", "Country/Region", "Population")
      For Each city In cities
         Console.WriteLine("{0,-20} {1,-25} {2,10:N0}", city.City, city.Country, city.Population)
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output:
'     City                 Country/Region            Population
'     New York City        United States of America   8,175,133
'     Detroit              United States of America     713,777
'     Paris                France                     2,193,031
'     
'     City                 Country/Region            Population
'     Detroit              United States of America     713,777
'     New York City        United States of America   8,175,133
'     Paris                France                     2,193,031
'     
'     City                 Country/Region            Population
'     Detroit              United States of America     713,777
'     Paris                France                     2,193,031
'     New York City        United States of America   8,175,133
'     
'     City                 Country/Region            Population
'     Paris                France                     2,193,031
'     Detroit              United States of America     713,777
'     New York City        United States of America   8,175,133

설명

이 대리자에서 사용 되는 Sort<T>(T[], Comparison<T>) 메서드 오버 로드는 Array 클래스 및 Sort(Comparison<T>) 메서드 오버 로드는 List<T> 배열 또는 목록 요소를 정렬 하는 클래스입니다.This delegate is used by the Sort<T>(T[], Comparison<T>) method overload of the Array class and the Sort(Comparison<T>) method overload of the List<T> class to sort the elements of an array or list.

확장 메서드

GetMethodInfo(Delegate)

지정된 대리자가 나타내는 메서드를 나타내는 개체를 가져옵니다.Gets an object that represents the method represented by the specified delegate.

적용 대상

추가 정보