实现IComparable、IComparer接口
using System;
using System.Collections.Generic;
public class MyClass
{
public class Employee:IComparable<Employee>
{
public int EmpID;
public string YearsOfSvc = "1";
public Employee(int id)
{
EmpID = id;
}
public Employee(int id , string ys)
{
this.EmpID = id;
this.YearsOfSvc = ys;
}
public int CompareTo(Employee rhs)
{
return this.EmpID.CompareTo(rhs.EmpID);
}
public int CompareTo(Employee rhs,Employee.EmployeeComparer.ComparisonType which)
{
switch(which)
{
case Employee.EmployeeComparer.ComparisonType.EmpID:
return this.EmpID.CompareTo(rhs.EmpID);
break;
case Employee.EmployeeComparer.ComparisonType.Yrs:
return this.YearsOfSvc.CompareTo(rhs.YearsOfSvc);
break;
}
return 0;
}
public static Employee.EmployeeComparer GetComparer()
{
return new Employee.EmployeeComparer();
}
public class EmployeeComparer:IComparer<Employee>
{
private ComparisonType whichComparison;
public enum ComparisonType
{
EmpID,
Yrs
}
public int Compare(Employee lhs,Employee rhs )
{
return lhs.CompareTo(rhs,whichComparison);
}
public Employee.EmployeeComparer.ComparisonType WhichComparison
{
get{return whichComparison;}
set{whichComparison = value;}
}
}
}
public static void RunSnippet()
{
List<Employee> list = new List<Employee>();
list.Add(new Employee(1,"how"));
list.Add(new Employee(0,"are"));
list.Add(new Employee(-1,"you"));
list.Add(new Employee(4,"fine"));
list.Add(new Employee(3,"thanks"));
Employee.EmployeeComparer c = Employee.GetComparer();
c.WhichComparison = Employee.EmployeeComparer.ComparisonType.Yrs;
list.Sort(c);
for(int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i].YearsOfSvc);
}
}
#region Helper methods
public static void Main()
{
try
{
RunSnippet();
}
catch (Exception e)
{
string error = string.Format("---\nThe following error occurred while executing the snippet:\n{0}\n---", e.ToString());
Console.WriteLine(error);
}
finally
{
Console.Write("Press any key to continue...");
Console.ReadKey();
}
}
private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
}
#endregion
}
实现IComparable、IComparer接口的更多相关文章
- C# IComparable接口、IComparer接口和CompareTo(Object x)方法、Compare()方法
在项目中经常会用到字符串比较,但是有时候对字符串的操作比较多,规则各异.比如有的地方我们需要用排序规则,有的地方需要忽略大小写,我们该如何写一个比较容易操作的比较方法呢?重新实现IComparer接口 ...
- 对象的比较与排序:IComparable和IComparer接口
IComparable和ICompare 接口是.net framework 中比较对象的标准方式,这两个接口提供一个返回值类似(大于0 等于0 小于0)的比较方法,二者区别如下: . ICompar ...
- c# 实现IComparable、IComparer接口、Comparer类的详解
在默认情况下,对象的Equals(object o)方法(基类Object提供),是比较两个对象变量是否引用同一对象.我们要必须我自己的对象,必须自己定义对象比较方式.IComparable和ICom ...
- [0] 关于IComparable和IComparer接口和Comparer类
关于IComparable和IComparer接口 和 Comparer类 IComparable和ICompareframeworkr接口是.net 中比较对象的标准方式,这两个接口之间的区别如下: ...
- IComparable和IComparer接口
C#中,自定义类型,支持比较和排序,需要实现IComparable接口.IComparable接口存在一个名为CompareTo()的方法,接收类型为object的参数表示被比较对象,返回整型值:1表 ...
- IComparer接口与
IComparable比较接口,继承此接口可对lis<T>调用sort进行排序 或者调用sort时可以为sort方法提供继承了IComparer的比较器
- C# List.Sort与IComparer接口及Comparison委托应用于集合排序
C#里List.Sort的用法 using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- c# 泛型和IComparable<T>接口
泛型 因为我们在编程中想先不定义数据类型,只想先写逻辑,就可以使用Object类型, 这样我们的逻辑就适用于所有类型,但是,在运行中,Object类型的变量会需要 转换到对应类型,浪费资源,所有出现泛 ...
- C#中的IComparable 和 IComparer 接口,实现列表中的对象比较和排序
借豆瓣某博主的话先对这两个接口进行一个解释: IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象 IComparer在一个单独的类中实现,可以比较任意两个对象. 如果已经支持 ...
- 数组自定义排序:IComparable和IComparer接口
首先先说一下IComparable和IComparer的区别,前者必须在实体类中实现,后者可以单独出现在一个排序类中,即此类只包含一个compare方法. Array类使用快速算法对数组中的元素进行排 ...
随机推荐
- [转]:Delphi 中的哈希表(1): THashedStringList
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- css absolute和float,relative,z-index的同异
大神占楼: 简书作者:张歆琳 http://www.jianshu.com/p/a3da5e27d22b http://www.cnblogs.com/lxblog/p/3152897.html 摘录 ...
- CSV文件的规范
CSV文件,全程Comma-separated values,就是逗号分隔的数据文件.常用于数据集成的数据交换部分标准部分. 最近看到一个项目组在讨论接口文件CSV的规范,真是替他们着急.讨论点: 文 ...
- A way to connect to network through WIFI on Centos 7
I bought a DELL laptop,but can not connect to network through wifi.There's lots of methods on the In ...
- 用Python读写Excel文件(转)
原文:google.com/ncr 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TA ...
- Eclipse 4.2 (Juno) 'Cannot create a server using the selected type' in Tomcat 7 - Stack Overflow.html
[太神奇了,真的可以呀] 原文:http://stackoverflow.com/questions/13423593/eclipse-4-2-juno-cannot-create-a-server- ...
- 多媒体(2):WAVE文件格式分析
目录 多媒体(1):MCI接口编程 多媒体(2):WAVE文件格式分析 多媒体(3):基于WindowsAPI的视频捕捉卡操作 多媒体(4):JPEG图像压缩编码 多媒体(2):WAVE文件格式分析
- Badboy使用数据源Excel进行脚本参数化
1.首先新建一个Excel,这里示例我写得非常简单,由两由数据组成,第一行为表头.见下图: 2.录制脚本,见上一篇,录制一个非常简单的搜狗查询 3.添加数据源,在Tools面板中找到Data Sour ...
- 错误“Sources”参数中指定了多次。“Sources”参数不支持重复项。
在“Sources”参数中指定了项“”多次.“Sources”参数不支持重复项. Asp.Net关于错误“Sources”参数中指定了多次.“Sources”参数不支持重复项. “Sources”参数 ...
- iOS 判断字符串是否为空
写一个字符串的扩展,实现判断字符串是否为空- (BOOL) isBlankString { if ([self isEqualToString:@"(null)"]) { retu ...