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. 关于DTO的定义问题。以及C#语言扩展的思考。

    数据传输对象 是我们经常用到的一个东西.有时候我们称之为的ViewModel也属于其中之一. 但是以往,我们总是 复制 实体类型的一些字段 然后单独创建这些对象.然后我们使用对象映射工具 进行值层面的 ...

  2. 推荐一款语音直播连麦App YAMI

    推荐一款语音直播连麦App YAMI 1 介绍 功能描述:[语音直播]:海量超有才主播,游戏送礼抢红包,嗨玩不停:[多人聊天室]:连麦交友处CP,主持人带你玩游戏,边聊边玩:[语音交友]:海量声优专属 ...

  3. BAT公司职级体系及薪水解密

    BAT公司职级体系及薪水解密 互联网圈有这么一句话:百度的技术,阿里的运营,腾讯的产品.那么代表互联网三座大山的BAT,内部人才体系有什么区别呢? 先谈谈腾讯的体系. 首先是腾讯. 1.职级: 腾讯职 ...

  4. 使用Windows的Linux子系统搭建嵌入式开发环境

      亲,都9102年了,还在用VMware跑嵌入式交叉编译链吗?   北京时间2019年6月13日,Windows 10发布预览版本18917.版本的主要功能是Linux子系统(windows sub ...

  5. pytorch-04-激活函数

    sigmoid函数: 越大的负数越接近0,越大的正数越接近1缺点:(1)造成梯度消失:该函数在靠近1和0的两端,梯度几乎变成0,梯度下降法:梯度乘上学习率来更新参数,如果梯度接近0,那么没有任何信息来 ...

  6. mysql truncate 引起的 system lock,导致其他进程等待

    1.现状:上线新项目,导致api服务延迟,cpu正常,内存正常,连接数正常,sql性能正常,sql进程正常(初步分析) 最后再次分析sql进程才发现 由于该 truncate table name ; ...

  7. Ceph更换OSD磁盘

    目录 简介 更换OSD操作步骤 1. 故障磁盘定位 2. 摘除故障磁盘 3. 重建raid0 4. 重建osd 控制数据恢复及回填速度 简介 首先需要说明的是,ceph的osd是不建议做成raid10 ...

  8. 前端学习:HTML的学习总结

    html简介 1 html是什么:超文本标记语言 超文本:文字/图片/音频/视频 标签/标记:<body></body> 怎么做:使用标签来创建网页 2 HTML的用途:是用来 ...

  9. ioc与bean管理

    IOC称之为控制反转,简单来说就是将对象的创建的权利和对象的声明周期的管理过程交给Spring框架来处理,在这个开发过程中不再需要关注对象的创建和生命周期的管理,而是在需要的时由Spring框架提供, ...

  10. MySQL各类型字段可定义最大宽度

    今天浏览mysql的官网文档,无意中看到如图划线部分一句话,引起了我的兴趣,所以决定做实验官方所言. 条例1.创建数据表时,所有字段定义时"宽度之和"不得超过65535字节: 条例 ...