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!!! 睡觉 

  • 相关阅读:
    changing a pointer rather than erasing memory cells
    验证码识别 edge enhancement 轮廓增强 region finding 区域查找
    Manipulating Data Structures
    passing parameters by value is inefficient when the parameters represent large blocks of data
    Aliasing 走样
    Artificial Intelligence Research Methodologies 人工智能研究方法
    Thread safety
    include pointers as a primitive data type
    flat file
    functional cohesion
  • 原文地址:https://www.cnblogs.com/ms27946/p/4976330.html
Copyright © 2011-2022 走看看