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

转载于:https://www.cnblogs.com/ms27946/p/4976330.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值