说明(2017-7-25 10:38:37):

1. 参照了上一篇百度文库里的文章。

2. 总结来看,Icomparer就是sort方法的一个参数,用来自定义一个排序规则。

3. 使用方法是,定义一个排序类,如PersonComparer,继承Icomparer接口,实现里面的Icomparer方法,用的时候直接sort(new

PersonComparer())就可以了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace _03IComparer用法
{
class Program
{
static void Main(string[] args)
{
List<Person> p = new List<Person>();
p.Add(new Person("张三", ));
p.Add(new Person("李四", ));
p.Add(new Person("王五", ));
p.Add(new Person("赵六", ));
p.Add(new Person("钱七", ));
p.Add(new Person("孙八", ));
p.Add(new Person("孙九", ));
//排序前
foreach (Person person in p)
{
person.SayHello();
}
Console.WriteLine("________________________");
//按姓名排序,注意sort排序会改变原值!
p.Sort(new PersonComparer(PersonComparer.CompareType.Name));
foreach (Person person in p)
{
person.SayHello();
}
Console.WriteLine("________________________");
//按年龄排序
p.Sort(new PersonComparer(PersonComparer.CompareType.Age));
foreach (Person person in p)
{
person.SayHello();
} Console.ReadKey();
} }
//定义Person类
class Person
{
public Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
public string Name { get; set; }
public int Age { get; set; }
//这个地方很多文章用了“public override string ToString()”,重写了ToString方法,返回上面两个属性,我觉得没必要,搞得让人费解,还不如重新起个名,比如SayHello
public void SayHello()
{
Console.WriteLine("我叫{0},今年{1}岁了!", this.Name, this.Age);
}
} //定义PersonComparer类,其实就是声明一个自定义的排序规则。此处的规则就是,按照名字排序,或者按照成绩排序。
//sort方法,如果无参,使用默认比较器。另外可以使用IComparison,IComparer参数。
class PersonComparer : IComparer<Person>
{
//定义枚举,方便传参,根据名字还是年龄排序。
public enum CompareType
{
Name,
Age
}
private CompareType type;
public PersonComparer(CompareType type)
{
this.type = type;
}
//实现IComparer接口,里面就一个Compare函数,返回int类型
//返回结果:一个带符号整数,它指示 x 与 y 的相对值。小于零,x小于y。零,x等于y。大于零,x大于y。
public int Compare(Person x, Person y)
{
if (this.type == CompareType.Name)
{
return x.Name.CompareTo(y.Name);
}
else
{
return x.Age.CompareTo(y.Age);
}
}
}
}

C#学习笔记(20)——使用IComparer(自己写的)的更多相关文章

  1. Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法

    Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法 在上一篇笔记中我们介绍了Ext.Net的简单用法,并创建了一个简单的登录表单.今天我们将看一下如何更好是使用FormPanel ...

  2. SQL反模式学习笔记20 明文密码

    目标:恢复或重置密码 反模式:使用明文存储密码 1.存储密码 使用明文存储密码或者在网络上传递密码是不安全的. 如果攻击者截取到你用来插入(或者修改)密码的sql语句,就可以获得密码.     黑客获 ...

  3. golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题

    golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...

  4. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  5. [原创]java WEB学习笔记20:MVC案例完整实践(part 1)---MVC架构分析

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. ‎Cocos2d-x 学习笔记(20) ControlButton

    [Cocos2d-x 学习笔记 目录链接] 1. 简介 ControlButton实现了按钮功能,根据触摸的位置和移动的过程可识别9中EventType类型,执行对应的回调函数. 直接继承了Contr ...

  7. Struts2 学习笔记20 类型转换part2 写自己的转换器

    之前说的是调用Struts2的默认转换器,现在我们来说以下写自己的转换器,这个一般不常用,在访问不是自己写的类中可能用到.我们一点点来,因为写自己的转换器需要注意的东西还是很多的. 我们还是用之前的项 ...

  8. Hadoop学习笔记—20.网站日志分析项目案例

    1.1 项目来源 本次要实践的数据日志来源于国内某技术学习论坛,该论坛由某培训机构主办,汇聚了众多技术学习者,每天都有人发帖.回帖,如图1所示. 图1 项目来源网站-技术学习论坛 本次实践的目的就在于 ...

  9. Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...

  10. Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:当前页面 网站日志分析项目案例 ...

随机推荐

  1. 在Hadoop1.2.1上运行第一个Hadoop程序FileSystemCat

  2. magento直接操作数据库

    查:     $read = Mage::getSingleton("core/resource")->getConnection('core_read');     $sq ...

  3. MySQL-通用查询日志

    记录了所有对mysql数据库服务器请求的信息,无论这些请求是否得到了正确的执行.   mysqld向通用查询日志中写信息是按照收到客户端的命令的顺序进行记录,而不是按照执行的顺序.   server重 ...

  4. 数据库事务隔离级别+Spring 声明性事务隔离级别

    数据库事务隔离级别 数据库提供了四种事务隔离级别, 不同的隔离级别采用不同的锁类开来实现. 在四种隔离级别中, Serializable的级别最高, Read Uncommited级别最低. 大多数数 ...

  5. eclipse 反编译插件 jadclipse

    1. 下载 JadClipse 下载JadClipse:http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download 注意选择与 ...

  6. android开发之interpolator的使用

    android:interpolator Interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repea ...

  7. fiddler 抓取iphone发出的http和https包

    1.清理iphone的描述文件,在通用里面设置.这一步目的防止手机里面已经存在了DO_NOT_TRUST_FiddlerRoot证书,导致后面抓不了包,所以先清理下 2.下载安装fiddler,百度或 ...

  8. 获取最新chromedriver.exe的方法,并查阅最新的chromedriver.exe支持到什么chrome版本

    1.打开https://chromedriver.storage.googleapis.com/index.html  (需要FQ),这个页面提供 所有 chromedirver版本下载, 版本排列 ...

  9. 一:php配置注意

    display_errors string 该选项设置是否将错误信息作为输出的一部分显示到屏幕,或者对用户隐藏而不显示. 设置 "stderr" 表示发送到 stderr 而不是  ...

  10. LVS:三种负载均衡方式比较+另三种负载均衡方式

    转:http://blog.csdn.net/u013256816/article/details/50705578 什么是LVS?   首先简单介绍一下LVS (Linux Virtual Serv ...