导出 (0) 打印
全部展开
此文章由机器翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
译文
原文

IComparable<T> 接口

定义由值类型或类实现的通用的比较方法,以为排序实例创建类型特定的比较方法。

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

public interface IComparable<in T>

类型参数

in T

要比较的对象的类型。

此类型参数是逆变。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的详细信息,请参阅泛型中的协变和逆变

IComparable<T> 类型公开以下成员。

  名称说明
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持CompareTo比较当前对象和同一类型的另一对象。
页首

此接口由值进行排序的类型实现,主要排序的。 例如,一个数字大于第二个数字,可以,另一个字符串可以在另一个前按字母顺序显示。 值类型或类实现 CompareTo(T) 方法以创建适合排序等目的的类型特定的比较方法。

IComparable<T> 接口定义 CompareTo(T) 方法,该方法确定实现类型的实例的排序顺序。 IEquatable<T> 接口定义 Equals 方法,该方法确定实现类型的实例的相等性。

CompareTo(T) 方法的实现必须返回有三个值之一的 Int32,如下表中所示。

含义

小于零

此对象小于 CompareTo 方法指定的对象。

此对象等于方法参数。

大于零

此对象大于方法参数。

IComparable<T> 接口提供强类型的比较方法,以排序泛型集合对象的成员。 因此,通常不从开发人员代码直接调用该方法。 List<T>.Sort() Add 等方法会自动调用它。

对实现者的说明

用实现此接口的类型替换 IComparable<T> 接口的类型参数。

如果实现 IComparable<T>,则应重载 op_GreaterThanop_GreaterThanOrEqualop_LessThanop_LessThanOrEqual 运算符返回与 CompareTo一致的值。 此外,还应实现 IEquatable<T> 有关完整信息参见 IEquatable<T> 文章。

下面的代码示例演示 IComparable<T> 的实现一个简单的 Temperature 对象的。 该示例创建带有 Temperature 对象键的字符串的 SortedList<TKey, TValue> 集合,并将多个温度和字符串对添加到无序列表中。 在调用 Add 方法时,SortedList<TKey, TValue> 集合使用 IComparable<T> 实现对列表项进行排序,然后,这些列表项将按温度的升序显示。


using System;
using System.Collections.Generic;

public class Temperature : IComparable<Temperature>
{
    // Implement the generic CompareTo method with the Temperature 
    // class as the Type parameter. 
    //
    public int CompareTo(Temperature other)
    {
        // If other is not a valid object reference, this instance is greater.
        if (other == null) return 1;

        // The temperature comparison depends on the comparison of 
        // the underlying Double values. 
        return m_value.CompareTo(other.m_value);
    }

    // The underlying temperature value.
    protected double m_value = 0.0;

    public double Celsius    
    {
        get
        {
            return m_value - 273.15;
        }
    }

    public double Kelvin    
    {
        get
        {
            return m_value;
        }
        set
        {
            if (value < 0.0)
            {
                throw new ArgumentException("Temperature cannot be less than absolute zero.");
            }
            else
            {
                m_value = value;
            }
        }
    }

    public Temperature(double kelvins)
    {
        this.Kelvin = kelvins;
    }
}

public class Example
{
    public static void Main()
    {
        SortedList<Temperature, string> temps = 
            new SortedList<Temperature, string>();

        // Add entries to the sorted list, out of order.
        temps.Add(new Temperature(2017.15), "Boiling point of Lead");
        temps.Add(new Temperature(0), "Absolute zero");
        temps.Add(new Temperature(273.15), "Freezing point of water");
        temps.Add(new Temperature(5100.15), "Boiling point of Carbon");
        temps.Add(new Temperature(373.15), "Boiling point of water");
        temps.Add(new Temperature(600.65), "Melting point of Lead");

        foreach( KeyValuePair<Temperature, string> kvp in temps )
        {
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius);
        }
    }
}
/* This example displays the following output:
      Absolute zero is -273.15 degrees Celsius.
      Freezing point of water is 0 degrees Celsius.
      Boiling point of water is 100 degrees Celsius.
      Melting point of Lead is 327.5 degrees Celsius.
      Boiling point of Lead is 1744 degrees Celsius.
      Boiling point of Carbon is 4827 degrees Celsius.
*/


.NET Framework

受以下版本支持:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

可移植类库

受以下版本支持:可移植类库

适用于 Windows 应用商店应用的 .NET

受以下版本支持:Windows 8

适用于 Windows Phone 应用的 .NET

受以下版本支持:Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参阅.NET Framework 系统要求

社区附加资源

添加
显示:
© 2014 Microsoft