IComparable<T>.CompareTo(T) 方法

定义

命名空间:
System
程序集:
System.Runtime.dll, mscorlib.dll, netstandard.dll

将当前实例与同一类型的另一个对象进行比较,并返回一个整数,该整数指示当前实例在排序顺序中的位置是位于另一个对象之前、之后还是与其位置相同。

C#复制

 
public int CompareTo (T other);

参数

other
T

与此实例进行比较的对象。

返回

一个值,指示要比较的对象的相对顺序。 返回值的含义如下:

含义
小于零 此实例在排序顺序中位于 other 之前。
此实例在排序顺序中的位置与 other 相同。
大于零 此实例在排序顺序中位于 other 之后。

示例

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

C#复制

 
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);
} // Define the is greater than operator.
public static bool operator > (Temperature operand1, Temperature operand2)
{
return operand1.CompareTo(operand2) == 1;
} // Define the is less than operator.
public static bool operator < (Temperature operand1, Temperature operand2)
{
return operand1.CompareTo(operand2) == -1;
} // Define the is greater than or equal to operator.
public static bool operator >= (Temperature operand1, Temperature operand2)
{
return operand1.CompareTo(operand2) >= 0;
} // Define the is less than or equal to operator.
public static bool operator <= (Temperature operand1, Temperature operand2)
{
return operand1.CompareTo(operand2) <= 0;
} // 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.
*/

注解

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

此方法只是定义,必须由特定的类或值类型实现才能使其生效。 "返回值" 部分中指定的比较("先于"、"与" 的位置相同)的含义取决于特定实现。

按照定义,任何对象比较大于null,两个 null 引用的比较结果相等。

实施者说明

对于对象 A、B 和 C,必须满足以下条件: 需要CompareTo (A)以返回零。

如果CompareTo (B)返回零,则需要CompareTo (A)以返回零。

如果CompareTo (B)返回零, CompareTo (c)返回零,则需要CompareTo (c)以返回零。

如果CompareTo (B)返回的值不是零,则需要CompareTo (A)来返回相反的符号值。

如果CompareTo (B)返回一个不等于零x的值,而CompareTo (c)返回与相同的符号y x值,则需要CompareTo (c)来返回与相同的符号的值x和。y

调用方说明

CompareTo(T)使用方法来确定类的实例的排序。

适用于

.NET Core

3.1 3.0 2.2 2.1 2.0 1.1 1.0

.NET Framework

4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6 4.5.2 4.5.1 4.5 4.0 3.5 3.0 2.0

.NET Standard

2.1 2.0 1.6 1.5 1.4 1.3 1.2 1.1 1.0

UWP

10.0

Xamarin.Android

7.1

Xamarin.iOS

10.8

Xamarin.Mac

3.0

另请参阅

IComparable<T>.CompareTo(T) 方法的更多相关文章

  1. String类型中ToString hashCode equals compareTo等方法的经典实现

    private final char value[]; private int hash; // Default to 0 public String(String original) { this. ...

  2. 当对象使用sort时候 前提是实现compareTo的方法

  3. C#集合 -- Lists,Queues, Stacks 和 Sets

    List<T>和ArrayList Generic的List和非Generic的ArrayList类支持可变化大小的对象数组,它们也是最常见的集合类.ArrayList实现了IList接口 ...

  4. C# IComparable接口、IComparer接口和CompareTo(Object x)方法、Compare()方法

    在项目中经常会用到字符串比较,但是有时候对字符串的操作比较多,规则各异.比如有的地方我们需要用排序规则,有的地方需要忽略大小写,我们该如何写一个比较容易操作的比较方法呢?重新实现IComparer接口 ...

  5. DateTime.CompareTo方法

    DateTime.CompareTo(value)方法,与一个时间比较,返回整数,含义如下: 值 说明 小于零 此实例早于 value. 零 此实例与 value 相同. 大于零 此实例晚于 valu ...

  6. Java中的compareTo()方法,compareToIgnoreCase()方法

    1.compareTo(String)方法: Java中String类有一个compareTo方法,该方法返回一个int类型的数据.其比较规则是:拿出字符串的第一个字符与参数的第一个字符进行比较,如果 ...

  7. Java compareTo() 方法(转载)

    Java compareTo() 方法 compareTo() 方法用于两种方式的比较: 字符串与对象进行比较. 按字典顺序比较两个字符串. 语法: int compareTo(Object o)// ...

  8. c# 实现IComparable、IComparer接口、Comparer类的详解

    在默认情况下,对象的Equals(object o)方法(基类Object提供),是比较两个对象变量是否引用同一对象.我们要必须我自己的对象,必须自己定义对象比较方式.IComparable和ICom ...

  9. 改善C#程序的50种方法

    为什么程序已经可以正常工作了,我们还要改变它们呢?答案就是我们可以让它们变得更好.我们常常会改变所使用的工具或者语言,因为新的工具或者语言更富生产力.如果固守旧有的习惯,我们将得不到期望的结果.对于C ...

随机推荐

  1. App启动时间分析

    iOS应用的启动可分为pre-main阶段和main()阶段. 1.pre-main阶段 可以通过配置Scheme,设置DYLD_PRINT_STATISTICS为1,来打印pre-main阶段的时间 ...

  2. ABP vNext中使用开源日志面板 LogDashboard

    ABP vNext 使用 logdashboard 本文示例源码:https://github.com/liangshiw/LogDashboard/tree/master/samples/abpvn ...

  3. Linux record

    1.设置ubuntu密码刚安装好的ubuntu系统,没有root密码,需要用户去手动设置的. sudo passwd root 输入2次密码即可. 2. Linux下is not in the sud ...

  4. 分库分表数据库自增 id

    分库分表之后,ID 主键如何处理? 面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 ...

  5. 通过四个问题了解HTTP协议基础

    很多人都知道学习和理解HTTP协议的重要性及必要性,但HTTP相关知识对计算机基础较差,尤其是我这种没有计算机基础的人来说更是晦涩难懂 乘着最近有空闲时间,开始恶补HTTP相关基础知识,下面请跟着我通 ...

  6. Mysql插入text类型字段错误记录 com.mysql.jdbc.MysqlDataTruncation: Data truncation: #22001

    一次插入操作报如下错误 com.mysql.jdbc.MysqlDataTruncation: Data truncation: #22001 是说字段值长度超过限制. MySQL TEXT数据类型的 ...

  7. Java学习:网络编程总结

    Java网络编程总结 一.概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备( ...

  8. 【03】Kubernets:K8S 操作入门

    写在前面的话 经过上一节,我们顺利将 K8S 集群搭建了起来,在其中我也简单的谈了一下关于 K8S 的网络.那么这一节我们主要谈谈如何来简单的使用 K8S 的命令.当然这些命令有很多,我们只是通过一个 ...

  9. 在ASP.NET Core中添加的Cookie如果含有特殊字符,会被自动转义

    我们知道在Cookie中有些字符是特殊字符,这些字符是不能出现在Cookie的键值中的. 比如"="是Cookie中用来分隔键和值的特殊字符,例如:Key01=Value01,表示 ...

  10. .Net Core 3.0 WebAPI && MySQL 8.0搭建详情

    微软在2019年9月24日发布了dotNet Core 3.0和C# 8.0,添加了许多新Features,详情点我.无疑dotNet Core 3.0和一个月之后即将发布的dotNet Core 3 ...