https://www.cnblogs.com/May-day/p/7490334.html

一,OrderBy排序在MDSN中有两种使用方法,如下

1》第一种方法的使用,就是根据某个字段排序,使用默认的比较器(Comparer<T>.default),如下,由于Dictionary是继承IEnumerable的,所以这里可以使用Dictionary作为排序集合,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace TestDemo
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("B", "2");
dic.Add("A", "1");
dic.Add("D", "4");
dic.Add("C", "3");
StringBuilder str1 = new StringBuilder();
var param1 = dic.OrderBy(x => x.Key).ToDictionary(x => x.Key, y => y.Value);
foreach (string dic1 in param1.Keys)
{
str1.Append(dic1+",");
}
Console.WriteLine(str1.ToString());
Console.ReadKey();
}
}
}

2》第二种方法的使用,按使用指定的比较器按升序对序列的元素进行排序。如下(使用ASCII值排序的例子介绍)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace TestDemo
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("B", "2");
dic.Add("A", "1");
dic.Add("D", "4");
dic.Add("C", "3");
StringBuilder str1 = new StringBuilder();
var param = dic.OrderBy(x => x.Key, new ComparerTest()).ToDictionary(x => x.Key, y => y.Value);
foreach (string dic1 in param.Keys)
{
str1.Append(dic1);
}
Console.WriteLine(str1.ToString());
Console.ReadKey();
}
}
public class ComparerTest : IComparer<String>
{
public int Compare(String x, String y)
{
return string.CompareOrdinal(x, y);
}
}
}

看下面这句的代码,不知道,大家有没有跟我一样的疑惑?如下

var param = dic.OrderBy(x => x.Key, new ComparerTest()).ToDictionary(x => x.Key, y => y.Value);

为什么这句话实例ComparerTest这个类就可以完成比较???

查询一遍第二个方法的源码,如下图

1,原来指定的比较器接收的是IComparer<TKey> comparer类型,而ComparerTest是继承 IComparer<TKey>实现的比较方法。

2,相当于IComparer<String> icomparer = new ComparerTest();(这里是显式转换和隐式,想了解可以看http://www.cnblogs.com/May-day/p/6856457.html),这里实现了IComparer中的Compare方法

3,最后OrderBy调用比较器,即是IComparer中的Compare,排序

OrderBy排序和IComparer的使用的更多相关文章

  1. c# 集合中有数字、字符的Orderby排序

    string[] things= new string[] { "105", "101", "102", "103", ...

  2. 关于angularjs的orderby排序

    包子君又来了,,,angularjs有一个非常强大的功能,那就是排序啦,其实也是算filter的一部分呢,包子刚刚做了一个排序,是按照公司的部门的数字大小排列的 由于后台没传来标识,所以我前台自己截图 ...

  3. Entity Framework 在OrderBy排序中使用字符串

    public static class LinqExtensions { private static PropertyInfo GetPropertyInfo(Type objType, strin ...

  4. JOIN,WHERE判断和ORDERBY排序

    MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小. 如果重复代码只是 ...

  5. 排序陷阱 List.Sort Linq.OrderBy

    部分内容摘自:http://www.th7.cn/Program/net/201511/692766.shtml C#框架里面主要提供了两种排序方式:Array.Sort Linq.Orderby. ...

  6. Linq查询操作之排序操作

    在Linq中排序操作可以按照一个或多个关键字对序列进行排序.其中第一个排序关键字为主要关键字,第二个排序关键字为次要关键字.Linq排序操作共包含以下5个基本的操作. 1.OrderBy操作,根据排序 ...

  7. C# IComparable接口、IComparer接口和CompareTo(Object x)方法、Compare()方法

    在项目中经常会用到字符串比较,但是有时候对字符串的操作比较多,规则各异.比如有的地方我们需要用排序规则,有的地方需要忽略大小写,我们该如何写一个比较容易操作的比较方法呢?重新实现IComparer接口 ...

  8. C#排序比较

    与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序.排序规范如下 IComparable接口(包括IComparable接口和IComparable< ...

  9. ServiceStack.OrmLite 笔记10-group having 分页orderby等

    group having 分页等 var ev = OrmLiteConfig.DialectProvider.SqlExpression(); group的使用 同sql一样,注意group分组的字 ...

随机推荐

  1. bookmarks

    嵌入式/硬件/计算机原理 PCI ID的分配 ARM汇编指令介绍 (连续4篇) https://blog.csdn.net/makethyme/article/details/1641413https ...

  2. Maven 新手入门+命令大全

    Maven 是一个项目管理工具,可以对 Java 项目进行构建.依赖管理. Maven 官方文档(English): http://maven.apache.org/index.html Maven ...

  3. maven:Fatal error compiling: 无效的目标 发行版: 1.8 -> [Help 1]

    https://blog.csdn.net/kkgbn/article/details/72777750

  4. Opencv 图像读取与保存问题

    转自 @yhl_leo 1 图像读取 首先看一下,imread函数的声明: // C++: Mat based Mat imread( ); // C: IplImage based IplImage ...

  5. M25P16中文版

    转载:https://blog.csdn.net/weiweiliulu/article/details/23666717 1.M25P16概述     M25P16是一款带有先进写保护机制和高速SP ...

  6. 微软AD相关操作的免费工具

    https://www.ittsystems.com/best-free-active-directory-tools/

  7. C#中基于GDI+(Graphics)图像处理系列

    https://blog.csdn.net/lhtzbj12/article/details/54024821

  8. 传统、VHD、VHDX性能对比测试(转帖)

    nkc3g4发表于 2014-4-30 16:24:41 传统.VHD.VHDX性能对比测试 - Windows To Go优盘系统 - 萝卜头IT论坛 - Powered by Discuz! ht ...

  9. kong插件应用

    插件概述 插件之于kong,就像Spring中的aop功能.在请求到达kong之后,转发给后端应用之前,你可以应用kong自带的插件对请求进行处理,合法认证,限流控制,黑白名单校验,日志采集等等.同时 ...

  10. 20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周 阶段性总结

    20175311胡济栋 2018-2019-2<Java程序设计>结对编程项目-四则运算 第二周 阶段性总结 需求分析 这是利用栈来设计一个计算器的第二阶段总结. 自动生成四则运算的题目( ...