导出 (0) 打印
全部展开
展开 最小化

Comparison<T> 委托

更新:2007 年 11 月

表示比较同一类型的两个对象的方法。

命名空间:  System
程序集:  mscorlib(在 mscorlib.dll 中)

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

J# 支持使用泛型 API,但是不支持新泛型 API 的声明。
JScript 不支持泛型类型或方法。

类型参数

T

要比较的对象的类型。

参数

x
类型:T
要比较的第一个对象。
y
类型:T
要比较的第二个对象。

返回值

类型:System.Int32

条件

小于 0

x 小于 y

0

x 等于 y

大于 0

x 大于 y

此委托由 Array 类的 Sort<T>(T[], Comparison<T>) 方法重载和 List<T> 类的 Sort(Comparison<T>) 方法重载使用,用于对数组或列表中的元素进行排序。

下面的代码示例演示如何使用 Comparison<T> 委托以及 Sort(Comparison<T>) 方法重载。

代码示例定义了一个名为 CompareDinosByLength 的字符串的替换比较方法。此方法按如下方式工作:首先测试要进行比较的字符串是否为 null,空引用被视为小于非空引用。然后,比较字符串的长度,长度越大,则字符串越大。最后,如果长度相等,则使用常规字符串比较方式。

该示例创建一个字符串 List<T>,并用四个字符串进行填充,无固定填充顺序。该列表还包含一个空字符串和一个空引用。显示该列表,使用表示 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

社区附加资源

添加
显示:
© 2014 Microsoft