zoukankan      html  css  js  c++  java
  • Linq之ToDictionary<TSource, TKey, TElement>的写法

    以前一直用 var query = xxx.Select(c=>new {c.X,c.Y}); 来取表中的某二列字段,今天有个应用需要转成Dictionary<T,U>,很少这样使用,居然忘记了写法!

    回忆了半天终于写对了,贴在这里备个份,方便以后查找:

    using System;
    using System.Collections.Generic;
    using System.Linq;

    namespace DicTest
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                List
    <Test> lst = new List<Test>();
                
    for (int i = 0; i < 10; i++)
                {
                    lst.Add(
    new Test() { Id = Guid.NewGuid(), Num = i, Name = i.ToString() });
                }

                
    Dictionary<Guid, int> dic = lst.ToDictionary(new Func<Test, Guid>(c => c.Id), new Func<Test, int>(c => c.Num));
    //如果觉得上面的写法太复杂,还可以简化为
    // Dictionary<Guid, int> dic = lst.ToDictionary(c => c.Id, c => c.Num);  

                
    foreach (Guid Id in dic.Keys)
                {
                    Console.WriteLine(
    "Key:{0}\tValue:{1}", Id, dic[Id]);
                }

                Console.Read();
            }
        }


        
    public class Test
        {
            
    public Guid Id { setget; }
            
    public int Num { setget; }
            
    public string Name { setget; }
        }
    }

    如果用Reflector反射一下,会发现实际上编译器自动生成了类似以下代码:(部分名称做了友好处理) 

    代码
    [CompilerGenerated]
    private static Func<Test, Guid> funcGuid;
     
    [CompilerGenerated]
    private static Func<Test, int> funcInt;
     
    [CompilerGenerated]
    private static int mNum(Test c)
    {
        
    return c.Num;
    }
     
    [CompilerGenerated]
    private static Guid mId(Test c)
    {
        
    return c.Id;
    }


    private static void Main(string[] args)
    {
        List
    <Test> lst = new List<Test>();
        
    for (int i = 0; i < 10; i++)
        {
            Test _t 
    = new Test();
            _t.Id 
    = Guid.NewGuid();
            _t.Num 
    = i;
            _t.Name 
    = i.ToString();
            lst.Add(_t);
        }
        Dictionary
    <Guid, int> dic = lst.ToDictionary<Test, Guid, int>((funcGuid != null? funcGuid : (funcGuid = new Func<Test, Guid>(Program.mId)), (funcInt != null? funcInt : (funcInt = new Func<Test, int>(Program.mNum)));
        
    foreach (Guid Id in dic.Keys)
        {
            Console.WriteLine(
    "Key:{0}\tValue:{1}", Id, dic[Id]);
        }
        Console.Read();
    }

    PS:今天写的好象都是些水文 :)

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Android开发--去掉标题栏
    Android开发app如何设定应用图标下的应用名称为汉字以及自定义图标
    mysql的sql其他 SQL中inner join、outer join和cross join的区别
    中文乱码问题 -js页面传值乱码
    liunx Centos Xshell 简单命令汇总
    html 属性及相关应用-实例
    时间格式转换
    三元表达式
    Grid++Report生成简单的条形码、Excel导出、图表控件 等
    jmp指令的简单应用
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1617240.html
Copyright © 2011-2022 走看看