이 설명서는 보관되지만 유지 되지 않습니다.

Comparison<T> 대리자

업데이트: 2007년 11월

형식이 같은 두 개체를 비교하는 메서드를 나타냅니다.

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

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

J#에서는 제네릭 API를 사용할 수 있지만 새로 선언할 수는 없습니다.
JScript에서는 제네릭 형식이나 메서드를 지원하지 않습니다.

Type 매개 변수

T

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

매개 변수

x
형식: T
비교할 첫 번째 개체입니다.
y
형식: T
비교할 두 번째 개체입니다.

반환 값

형식: System.Int32

조건

0보다 작음

xy보다 작습니다.

0

xy와 같습니다.

0보다 큼

xy보다 큽니다.

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

다음 코드 예제에서는 Sort(Comparison<T>) 메서드 오버로드가 있는 Comparison<T> 대리자를 사용하는 방법을 보여 줍니다.

이 코드 예제에서는 문자열에 대한 대체 비교 메서드 CompareDinosByLength를 정의합니다. 이 메서드는 다음과 같이 작동합니다. 먼저 비교 대상이 null인지 테스트하고 null 참조를 null이 아닌 값보다 작은 것으로 처리합니다. 두 번째로, 문자열 길이를 비교하고 긴 문자열을 더 큰 것으로 간주합니다. 세 번째로, 길이가 같으면 일반 문자열 비교를 사용합니다.

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

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


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에서 지원

.NET Compact Framework

3.5, 2.0에서 지원

XNA Framework

2.0, 1.0에서 지원
표시: