zoukankan      html  css  js  c++  java
  • dynamic结合匿名类型 匿名对象传参

      首先说明下,我一般很少用dynamic关键字(类)的,因为毕竟是由反射实现的,所以对于性能方面还是吃亏不少注:由于心里没底,查了一些资料得知,dynamic实质上好像不是由反射实现的,其性能也比直接反射要高不少,至于为什么,我也不明白,希望你们知道的能留言告诉我一下!谢谢啦 ^_^)我也不知道为什么DLR能够实现与反射一样的实现,但代码,性能要比后者简介,高效!!

      我这里就纯粹在这里坐下记录

    1. 匿名对象(类型)传参的几种方式

      代码如下:

      class Program

      {
        static void Main(string[] args)
        {
          int[] array = new int[]{
          3,4,5,6,7,8,9
          };
        var data = from r in array
          where r == 8
          select new
          {
            ID = r
          };
        GetNumber(data);

        GetNumber1(data.First());  //直接转成一个匿名类
        }
        static void GetNumber(dynamic data)
        {
          Console.WriteLine(dy.First().ID);  //报错,因为dy传过来之后不识别First()这个Linq下的拓展方法
          Console.ReadLine();
        }

        static void GetNumber1(dynamic data)
        {
          Console.WriteLine(dy.ID);  //正确
          Console.ReadLine();
        }

        static void GetNumber2(dynamic data)
        {

          //强转dynamic对象

          IEnumerable<dynamic> dy = data;
          Console.WriteLine(dy.First().ID);  //正确,能正确识别Linq下的First()
          Console.ReadLine();
        }

    }

      总结:1. 动态对象不支持拓展方法

                  2. 匿名函数(Lambda表达式)不能用作动态方法调用的参数,故Linq不用用于动态对象

                  3. 能避免用dynamic就避免使用,但是有些情况,还是可以使用的(比如能大幅度缩减代码量,提高代码清晰度,代码结构分明等好处),有时候那么点性能也不是那么重要 ^_^

      OVER!!! 睡觉 

  • 相关阅读:
    后缀数组模板
    UVALive
    蓝桥杯 拿糖果
    蓝桥杯 矩阵乘法(区间DP)
    51nod 矩阵乘法
    13.boost有向无向图邻接表表示
    12.boost有向图无向图(矩阵法)
    11.使用boostregex遭遇无法打开libboost_regex-vc120-mt-sgd-1_62.lib的问题
    10.ref regex unordered_set smartpoint
    9.variant move function change_cast
  • 原文地址:https://www.cnblogs.com/ms27946/p/4976330.html
Copyright © 2011-2022 走看看