C#3.0 为我们带来什么(5) —— 匿名类型

var employee= new{Age =25,Name = "james" }
无须显示声明一个类,而且在初始化器里面可以获取上下文的变量——闭包
这就是C#3.0里提供的匿名类型。
并且可以对声明的类型进行这样的访问
string name = employee.name;

来看看IL的实现。
.method public hidebysig instance void  dd() cil managed
{
  // 代码大小       22 (0x16)
  .maxstack  3
  .locals init ([0] class '<>f__AnonymousType0`2'<int32,string> employee,
           [1] string name)
  IL_0000:  nop
  IL_0001:  ldc.i4.s   25
  IL_0003:  ldstr      "james"
  IL_0008:  newobj     instance void class '<>f__AnonymousType0`2'<int32,string>::.ctor(!0,
                                                                                        !1)
  IL_000d:  stloc.0
  IL_000e:  ldloc.0
  IL_000f:  callvirt   instance !1 class '<>f__AnonymousType0`2'<int32,string>::get_Name()
  IL_0014:  stloc.1
  IL_0015:  ret
} // end of method testvar::dd
看到代码会想'<>f__AnonymousType0`2'从何而来呢?
来看il视图就知道了。

虽然匿名类型非常方便,但是我们无法通过代码来访问到'<>f__AnonymousType0`2',而且var不能定义全局变量与参数类型,所以导致了我们创建的匿名类型实例只能应用在函数内部。从而限制了匿名类型的使用。

posted on 2008-01-06 18:47 tianyamoon 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/tianyamoon/archive/2008/01/06/1028013.html

C#3.0 为我们带来什么(5) —— 匿名类型相关推荐

  1. C# 3.0新特性初步研究 Part5:匿名类型

    匿名类型(Anonymouse Type)--这年头什么多系都匿名了 : ) 在初始化的时候根据初始化列表自动产生类型的一种机制. 典型的代码: 1class Program 2    { 3     ...

  2. ASP3.0给我们带来的新技术之一---DataShaping技术

    ASP3.0给我们带来的新技术之一---Data Shaping技术 Data shaping(又可以被称为分层记录集) 如果你对ACCESS非常熟悉的话,它就类似与其中的子表.在你使用VB 进行数据 ...

  3. C#3.0 为我们带来什么(2) —— 自动属性

    C#3.0 为我们带来什么(2) -- 自动属性 public int ID { get; protected set; }         public string Name { get; set ...

  4. C#3.0 为我们带来什么(3) —— 初始化器

    C#3.0 为我们带来什么(3) -- 初始化器 对比代码 c#2.0         Employee e1;         private void ee1()         {        ...

  5. 给定一个介于0和1之间的实数,类型为double,打印它的二进制表示

    2019独角兽企业重金招聘Python工程师标准>>> /** * 功能:给定一个介于0和1之间的实数,类型为double,打印它的二进制表示.如果该数字无法精准地用32位以内的二进 ...

  6. 微软免费图书《Introducing Microsoft LINQ》翻译Chapter2.1:C# 3.0 特性(对象初始化表达式\匿名类型\查询表达式)...

    本书翻译目的为个人学习和知识共享,其版权属原作者所有,如有侵权,请告知本人,本人将立即对发帖采取处理. 允许转载,但转载时请注明本版权声明信息,禁止用于商业用途! 博客园:韩现龙 Introducin ...

  7. 【错误记录】Kotlin 1.5.0 编译报错 ( 1.5.0 中 Float 不能直接转 Byte 类型 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Kotlin 1.5.01.5.01.5.0 后语法与之前不同 , Float 类型不能直接转为 Byte 类型 , 需要先转为 Int , 然后转 ...

  8. 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(二)

    前情提要 基于上文所说 基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一) 我用tf2.0和Python3.7复现了一个基于CNN做音乐分类器.用余弦相似度评估距离的一个音乐推荐模型. ...

  9. 如何提升鸿蒙战绩,蛰伏一年 鸿蒙系统2.0为我们带来了哪些升级?

    去年的华为开发者大会上,我们看到了当时在网络上流传已久的HarmonyOS,鸿蒙系统.在随后的一年之中,鸿蒙系统在智慧屏上生根发芽,不断完善自身生态,让人觉得它异常低调.暂时的蛰伏只是为了能够更好地进 ...

最新文章

  1. Python为给定模型执行留一法交叉验证实战LOOCV(leave-one-out cross-validation)
  2. 支付宝支付 订单参数异常,请重新下单后再发起付款
  3. linux环境下java开发_Linux Ubuntu系统下Java开发环境搭建
  4. C语言 字符串的声明与使用
  5. Jsp页面用table表格来让文字和文本框对齐
  6. AntV 数据可视化解决方案发布
  7. springboot学习笔记-5 springboot整合shiro
  8. cuda对应pytorh安装
  9. CSS小技巧---半透明边框
  10. 树莓派 armv几_如何在具有armv6处理器的树莓派板上安装和使用Java 11和JavaFX 11
  11. java p12证书_java引用微信支付的p12证书文件
  12. windows ping 端口
  13. iwconfig 安装_arm linux iwconfig 等
  14. open数据库Timeout expired 错误
  15. 当你迷茫时,请努力做好现在的工作
  16. Qt笔记11:qt如何设置应用程序图标和可执行程序图标
  17. ue4开关门点击时onclicked事件没有触发的解决方案
  18. 数据可视化之大数据可视化
  19. Python中文件路径
  20. java巴特沃斯滤波器编程_EMG信号的低通巴特沃斯滤波器

热门文章

  1. 【Java面试题】3 Java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?超详细解析...
  2. Linux学习--第十三天--日志、系统运行级别、grub加密
  3. SQL Between a and b
  4. PHP实现支付宝即时到账功能
  5. [UVa1213]Sum of Different Primes(递推,01背包)
  6. jenkins-git-gradle配置项目
  7. Java 多线程初探(二) - 通讯与协调
  8. 在Python-dataframe中如何把出生日期转化为年龄?
  9. springboot整合liquibase入门实例
  10. 并发编程(CountDownLatch使用)