이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

Comparison<T> 대리자

 

게시 날짜: 2016년 11월

동일한 형식의 두 개체를 비교하는 메서드를 나타냅니다.

네임스페이스:   System
어셈블리:  mscorlib(mscorlib.dll에 있음)

public delegate int Comparison<in T>(
	T x,
	T y
)

매개 변수

x
Type: T

비교할 첫 번째 개체입니다.

y
Type: T

비교할 두 번째 개체입니다.

반환 값

Type: System.Int32

다음 표와 같이 xy의 상대 값을 나타내는 부호 있는 정수입니다.

의미

0 보다 작은

xy보다 작은 경우

0

xy와 같습니다.

0 보다 큼

xy보다 큰 경우

형식 매개 변수

inT

비교할 개체의 형식입니다.

이 대리자를 사용 하 여는 Sort<T>(T[], Comparison<T>) 메서드 오버 로드는 Array 클래스 및 Sort(Comparison<T>) 메서드 오버 로드는 List<T> 배열 또는 목록 요소를 정렬 하는 클래스입니다.

다음 코드 예제에서는 Comparison<T> 대리자는 Sort(Comparison<T>) 메서드 오버 로드 합니다.

코드 예제에서는 문자열에 대 한 대체 비교 메서드를 정의 CompareDinosByLength합니다. 이 방법은 다음과 같습니다:에 대 한 여부도 먼저 null, null 참조는 null이 아닌 미만으로 처리 됩니다. 둘째, 문자열 길이 비교 하 고 더 긴 문자열이 큰 것으로 간주 됩니다. 셋째, 길이 값이 같으면 일반 문자열 비교 ´ ù.

A List<T> 문자열의 만들어지고 특정 순서 없이에서 4 개의 문자열 채워집니다. 목록에는 빈 문자열과 null 참조가 포함 됩니다. 사용 하 여 정렬 목록이 표시 되는 Comparison<T> 나타내는 제네릭 대리자는 CompareDinosByLength 메서드를 다시 표시 합니다.

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"
 */

다음 예제에서는 Comparison<T> 컬렉션의 요소를 정렬 하는 대리자 CityInfo 개체입니다. CityInfo도시 및 해당 도시의 인구에 대 한 정보를 포함 하는 응용 프로그램 정의 클래스가입니다. 이 예제에서는 세 가지 메서드를 정의 CompareByName, CompareByPopulation, 및 CompareByNames, 순서 지정의 세 가지 방법으로 제공 하는 CityInfo 개체입니다. 각 방법에 할당 되는 comparison 의 인수는 Array.Sort<T>(T[], Comparison<T>) 메서드.

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

유니버설 Windows 플랫폼
8 이후 사용 가능
.NET Framework
2.0 이후 사용 가능
이식 가능한 클래스 라이브러리
이식 가능한 .NET 플랫폼 에서 지원됨
Silverlight
2.0 이후 사용 가능
Windows Phone Silverlight
7.0 이후 사용 가능
Windows Phone
8.1 이후 사용 가능
맨 위로 이동
표시: