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. RHEL8/CentOS8的基础防火墙配置-用例

    systemctl systemctl unmask firewalld #执行命令,即可实现取消服务的锁定 systemctl mask firewalld # 下次需要锁定该服务时执行 syste ...

  2. Windows下MySQL安装流程,8.0以上版本ROOT密码报错及修改

    官网下载MySQL安装后,解压,添加环境变量,以管理员方式运行cmd,运行以下命令 mysqld --initialize --console mysqld -install net start my ...

  3. Feign的介绍和使用

    一.Feign的简介 Feign是一个声明式 WebService 客户端,使用Feign能够让编写Web Service 客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持J ...

  4. 查看linux中某个端口port是否被利用

    (1)lsof -i:端口号查看某个端口是否被占用 (2)netstat -an|grep 80 netstat -- show network status (3)杀掉进程 kill pid 注意: ...

  5. 使用eclipse git插件合并merge部分代码方法

    当有一个父项目,它的下面有多个子项目:或者一个项目下边,只想合并部分路径,甚至部分文件的内容,使用下边的方法可以达到目的,特此记录: 1.主项目右键 -> team -> remove f ...

  6. VSCode打字特效Power Mode插件

    由于最近比较频繁使用VSCode这个软件写代码,然后里面有一个非常炫酷的打字特效插件,平时写代码的时候不会感觉太枯燥(其实就是装一下逼吧)! 安装很简单,但是容易忘,所以这里整理一下具体的部署步骤. ...

  7. js汉字转换为阿拉伯数字支持十到十九

    js汉字转换为阿拉伯数字  直接贴函数 function cnnumtonum(chnStr){ var chnNumChar = { 零:,一:,二:,三:,四:,五:,六:,七:,八:,九: }; ...

  8. javascript 对象的方式解析url地址参数

    看到一个知识点,比如说给一个 url参数,让其解析里面的各个参数,以前我都是通过字符串分割来实现的.但是通过这样的方式比较麻烦,而且操作字符串容易出错.今天看到了一个更有效更快速的方式,就是通过对象来 ...

  9. 学习CSS Grid布局

    一. 重要术语: CSS Grid(网格) 布局(又称为 "Grid(网格)" ),是一个二维的基于网格的布局系统,它的目标是完全改变我们基于网格的用户界面的布局方式. FlexB ...

  10. 数据库——可视化工具Navicat、pymysql模块、sql注入问题

    数据库--可视化工具Navicat.pymysql模块.sql注入问题 Navicat可视化工具 Navicat是数据库的一个可视化工具,可直接在百度搜索下载安装,它可以通过鼠标"点点点&q ...