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();
    }
    自:http://www.cnblogs.com/yjmyzz/archive/2009/12/04/1617240.html
  • 相关阅读:
    Microsoft Biztalk Server 2000简介
    BizTalk学习笔记系列之二:实例说明如何使用BizTalk
    BizTalk学习笔记系列之三:企业集成应用和BizTalk
    简单状态机Workflow基于Web应用【转】
    C#类、接口、虚方法和抽象方法
    多表查询语句写法、数据库数字如何转化为汉子、Sql语句拼接
    IsPostBack用法
    Net前台页面如何调用后台cs变量
    aspx页面中写if else 语句的方法,
    查询数据库最大的索引、静态类与非静态类的区别、后台操作DIV样式的方法、C#操作TreeView组件中的一些常用方法及具体实现
  • 原文地址:https://www.cnblogs.com/guanjie20/p/1638937.html
Copyright © 2011-2022 走看看