首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏DotNet 致知

    C#内建接口:IComparable

    基本上一节讲一个吧,本节先从IComparable开始。 01.了解IComparable 一般的,值类型的数据比较大小,就是看它俩的值,这种比较很单纯,但是也有某些情况,我们需要对引用类型进行比较,也就是说比较两个对象谁大谁小,对象之间的比较其实就是根据业务需求 ,比较其属性,为了统一一个对象比较之间的规范,C#中定义了一个名为IComparable的接口,顾名思义,继承了这个接口的对象都是可比较的嘛,那下面就来看看这个接口的成员吧: 这个接口还是很简单的 02.代码演示 下面从代码中演示一下它的使用: 以上是一个矩形类,有宽和高两个属性,比较矩形大小就是比较其面积大小,所以我继承了IComparable接口,并将面积比较代码写在了里面,具体代码很简单

    69220编辑于 2021-12-08
  • 来自专栏HueiFeng技术专栏

    C# 中的IComparable和IComparer

    IComparable接口 该接口由其值可以排序或排序的类型实现,并提供强类型的比较方法以对泛型集合对象的成员进行排序,例如数字可以大于第二个数字,一个字符串可以在另一个字符串之前以字母顺序出现。 通常,提供Icomparable<T>实现的类型还IEquatable<T>实现接口。IEquatable<T>接口Equals定义方法,该方法确定实现类型的实例的相等性。 IComparer接口 IComparable 接口的CompareTo方法一次只能对一个字段进行排序,因此无法对不同的属性进行排序。 IComparable<T>和IComparer<T> 上述示例中我们将对象进行了多次的装箱和拆箱,那么此时我们可以将方法改为泛型的,泛型的出现也让我们避免了装箱和拆箱的资源浪费. 最终我们实现的代码片段如下: IComparable<T> class Student : IComparable<Student> { public string Name

    98120发布于 2020-02-24
  • 来自专栏HueiFeng技术专栏

    C# 中的IComparable和IComparer

    IComparable接口 该接口由其值可以排序或排序的类型实现,并提供强类型的比较方法以对泛型集合对象的成员进行排序,例如数字可以大于第二个数字,一个字符串可以在另一个字符串之前以字母顺序出现。 通常,提供Icomparable<T>实现的类型还IEquatable<T>实现接口。IEquatable<T>接口Equals定义方法,该方法确定实现类型的实例的相等性。 示例: class Student : IComparable { public string Name { get; set; } public int item.Age); } } } 输出如下 [1098068-20200101153632047-2087527709.png] IComparer接口 IComparable 最终我们实现的代码片段如下: IComparable<T> class Student : IComparable<Student> { public string Name

    79900发布于 2020-01-22
  • 来自专栏喵叔's 专栏

    利用 IComparable<T> 以及 IComparer<T> 定义顺序关系

    这里需要注意的是在新的 .NET API 中大部分都使用了 IComparable ,而在一些老的 API 中使用的依然是不带泛型的 IComparable 接口,所以我们在实现 IComparable 的时候就必须实现 IComparable 。 下面的代码就同时实现了 IComparableIComparable。 public class User:IComparable<User>,IComparable { private readonly string name; public User(string 到这里我们的代码并没有完成,我们还需要利用 CompareTo 方法重载关系运算符: public class User:IComparable<User>,IComparable { private

    77220发布于 2020-11-11
  • 来自专栏hbbliyong

    泛型介绍(接上一篇,具体的事例随后呈上)

    为了确保T类型参数都是先了IComparable接口, public class Binary<T> where T:System.IComparable{...} 编译器会确保每次使用Binary类的时候,都必须指定一个实现了IComparable接口的类型参数. 2.3 struct/class 约束 另一个重要的泛型约束是将类型参数限制为一个值类型或者一个引用类型 例: Public struct Nullable<T>:IFormattable,IComparable,IComparable<Nullable<T>>,INullable where T:struct  class EntityDictionary<TKey,TValue>: System.Collections.Generic.Dictionary<TKey,TValue> Where TKey:IComparable public T method<T>(T params) { return params; } 泛型方法也允许指定约束: public T method<T>(T params) where T:IComparable

    1K50发布于 2018-03-05
  • 来自专栏喵叔's 专栏

    规范约束条件

    <T>) { IComparable<T> val1 = t1 as IComparable<T>; if(t2 as IComparable<T>) <T>") } } 这段代码中执行了大量的强类型转换,在转换之前还判断时传入的参数是否实现了 IComparable 接口。 这段代码如果使用了泛型约束就会很简单: public bool DemoEqual<T>(T t1, T t2) where T : IComparable<T> => t1. 约束,那么他调用的 Equals 是 IComparable.Equals ,反之调用的就是 System.Object.Equals 。 Tip:如果有较好的方法,我还是建议大家使用较好的方法,比如前面我们所说的 IComparable.Equals 。

    1.2K10发布于 2020-09-08
  • 来自专栏草根专栏

    C# - 实现类型的比较

    IComparable<T> .NET 里,IComparable<T>是用来作比较的最常用接口。 如果某个类型的实例需要与该类型的其它实例进行比较或者排序的话,那么该类型就可以通过实现IComparable<T>接口来达到此目的。 IComparable<T>只提供了一个方法: ? 在自定义类型上实现比较 其实我通常不在我的类型上去实现IComparable<T>,包括引用类型和原始类型。 因为它没实现IComparable<T>接口。 使用大于号小于号的话,也会报错: ? 因为这个类型也没有实现比较操作符。 实现IComparable<T>接口 ? 但是实现比较性的话: 实现IComparable<T>接口 也可选去实现比较操作符。

    1.3K20发布于 2019-05-25
  • 来自专栏GreenLeaves

    C# 算法之选择排序

    class SelectctionSort { static void Main(string[] args) { var arr = new IComparable [] Sorted(IComparable[] array) { int count = array.Length; for (int i a, IComparable b) { var res = a.CompareTo(b); return res < 0; param name="i"></param> /// <param name="min"></param> private static void Exchange(IComparable / <param name="array"></param> /// <returns></returns> private static bool IsSorted(IComparable

    62230发布于 2019-05-25
  • 来自专栏技术博客

    编写高质量代码改善C#程序的157个建议[10-12]

    所以接口IComparable现在可以派上用场了。现在先定义一个实体,并且实现接口IComparable。 public class Salary:IComparable { ///

    /// 姓名 /// 假如现在在Salary类中添加了一个奖金的字段如下 public class Salary:IComparable { /// /// 姓名 因此以上代码中的ArrayList,可以替换为List<T>,对应的我们就应该实现IComparable<T>和IComparer<T>。 实现的代码如下:   1、实体类实现接口IComparable<T>  2、自定义比较器实现接口IComparer<T> 3、进行排序的调用 public class Salary:IComparable

    58940发布于 2018-08-31
  • 来自专栏centosDai

    CA1036:重写可比较类型中的方法

    项 “值” RuleId CA1036 类别 设计 修复是中断修复还是非中断修复 非中断 原因 类型实现 System.IComparable 接口,并且不重写 System.Object.Equals 规则说明 定义自定义排序顺序实现 IComparable 接口的类型。 CompareTo 方法返回整数值,该值指示类型的两个实例的正确排序顺序。 此规则标识设置排序顺序的类型。 提供 IComparable 的实现时,通常还必须重写 Equals,以便返回与 CompareTo 一致的值。 代码注释标识满足与 Equals 和 IComparable 接口相关的各种规则的方法。 , IComparable<RatingInformation> { public string Rating { get; private set;

    97120编辑于 2022-01-10
  • 来自专栏EdisonTalk

    《C#图解教程》读书笔记之六:接口和转换

    (2)从IComparable接口看接口实例:   假设有如下一段代码,它使用Array类的一个静态方法Sort对一个未排序的int类型数组进行排序,并输出排序后的结果。 Array类的Sort方法其实依赖于一个IComparable的接口,它声明在BCL中,包含唯一的CompareTo方法。它接收一个object类型的参数,可以匹配任何引用类型。 public interface IComparable { int CompareTo(object obj); }   这下,我们知道了int类型默认实现了IComparable接口,而我们的 因此,我们需要将MyClass实现这个IComparable接口。 class MyClass : IComparable { public int TheValue; public int CompareTo

    90430发布于 2018-08-20
  • 来自专栏Unity游戏开发

    万能排序

    static void Sort<T, TKey>(T[] arr, FindAttr<T, TKey> findAttr) where TKey : IComparable { ("属性值:" + findAttr(item)); } } 3.使用此方法的时候,将findAttr通过匿名函数或者Lambda表达式来定义方法,方法返回一个Icomparable

    53420发布于 2019-05-29
  • 来自专栏分布式系统和大数据处理

    C#中的泛型

    类,让它实现IComparable接口: public class Book :IComparable { // CODE:上面的实现略 public int CompareTo(object 好了,我们现在回到正题,既然我们现在已经让Book类实现了IComparable接口,那么我们的泛型类应该可以工作了吧? 我们需要告诉SortHelper<T>类(准确说是告诉编译器),它所接受的T类型参数必须能够进行比较,换言之,就是实现IComparable接口,这便是本小节的主题:泛型约束。 为了要求类型参数T必须实现IComparable接口,我们像下面这样重新定义SortHelper<T>: public class SortHelper<T> where T:IComparable { 因为现在T已经实现了IComparable,而数组array中的成员是T的实例,所以当你在array[i]后面点击小数点“.”时,VS200智能提示将会给出IComparable的成员,也就是CompareTo

    1.7K70发布于 2018-09-30
  • 来自专栏WD学习记录

    数据结构与算法2016-06-03

    3.常用的接口 (1)IComparable接口 IComparable接口定义通用的比较方法。由类型使用的IComparable接口提供了一种比较多个对象的标准方式。 如果一个类要实现与其他对象的比较,则必须实现IComparable接口。由可以排序的类型,例如值类型实现以创建适合排序等目的类型特定的比较方法。

    45820发布于 2018-09-03
  • 来自专栏hbbliyong

    看到他我一下子就悟了-- 泛型(2)

    如:为了确保T类型参数都是先了IComparable接口, public class Binary<T> where T:System.IComparable{...} 编译器会确保每次使用Binary类的时候,都必须指定一个实现了IComparable接口的类型参数.   下面的程序通过改写前一个程序中的电话列表程序来说明接口约束的用途。 只需要指定关键字struct或者class.在同时存在其他约束时,class或者struct必须位于约束列表的开头 例: Public struct Nullable<T>:IFormattable,IComparable ,IComparable<Nullable<T>>,INullable where T:struct {//.......} 2.4 new()构造函数约束   New()构造函数约束允许开发人员实例化一个泛型类型的对象 public T method<T>(T params) { return params; } 泛型方法也允许指定约束: public T method<T>(T params) where T:IComparable

    94490发布于 2018-03-05
  • 来自专栏张志敏的技术专栏

    快速排序与三路快速排序

    C# 代码实现 public static class Quick<T> where T : IComparable { public static void Sort(T[] a) { return a[k]; } } return a[k]; } private static bool Less(IComparable v, IComparable w) { return v.CompareTo(w) < 0; } private static bool Less(object v, C# 代码实现如下: public static class Quick3<T> where T : IComparable { public static void Sort(T[] a)

    71330发布于 2020-08-10
  • 来自专栏呆呆敲代码的小Y 公众号

    【100个 Unity实用技能】| C# 中 Sort() 对List中的数据排序的几种方法 整理总结

    //studentList.Sort();//会报错 此时直接使用studentList.sort()是报错的:ArgumentException:至少一个对象必须实现IComparable 继承接口IComparable<> 将自定义类型继承 接口IComparable<> ,并实现接口成员CompareTo 按照年龄进行排序,代码如下: class Student:IComparable

    4K20编辑于 2022-11-12
  • 来自专栏全栈程序员必看

    C# Sort排序

    scoreList.Sort((x,y)=>x.CompareTo(y)) scoreList.Sort((x,y)=>-x.CompareTo(y));//降序排列 2.对于非数值类型或者自定义类型,可通过实现IComparable 接口重写CompareTo方法来排序: public class Person : IComparable<Person> { public string Name { get; item.ToString()); } Console.ReadKey(); 输出:Bob-19 Lily-20 Mary-17 Mary-18 或不实现IComparable

    73220编辑于 2022-09-14
  • 来自专栏分布式系统和大数据处理

    基于业务对象(列表)的排序

    IComparable<T>接口 我们就是自己想也应该想到为什么会出错:Order对象包含了四个属性OrderId、CustomerId、OrderDate、Country,而int只有它本身的值,所以 而IComparable接口,定义了如何进行排序的规则,如果我们想要对List<Order>对象进行排序,那么我们就需要让列表的元素,也就是Order对象实现这个接口。 实际上,List<int>之所以可以直接调用Sort()方法,是因为int,以及几乎全部的基本类型(比如string,char,datetime等),本身就实现了IComparable<T>。 public interface IComparable<T> { int CompareTo(T other); } 这个接口只需要实现一个方法,CompareTo(),它传递与要比较的对象( 我们首先了解IComparable<T>接口,学习了如何实现这个接口以实现针对某一字段的一个默认排序。

    3K20发布于 2018-09-30
  • 来自专栏技术博客

    C# 泛型的简单理解(安全、集合、方法、约束、继承)

    我能够通过加以约束--为参数化类型指定的类型必须要实现IComparable接口--来指定这一点。 public static T Max<T>(T op1, T op2)where T:IComparable { if (op1.CompareTo(op2) < 0) return op1; return op2; } 好了,我指定的约束是,用于参数化类型的类型必须继承自(实现)Icomparable class_name 类型可以是class_name或者是它的一个子类   where T : interface_name 类型必须实现指定的接口   你可以指定约束的组合,就象: where T : IComparable 这就是说,用于参数化类型的类型必须实现Icomparable接口并且必须有一个无参构造器。 继承与泛型 一个使用参数化类型的泛型类,象MyClass1<T>,称作开放结构的泛型。

    1.3K10发布于 2018-09-11
领券