知识大全 C#中的匿名类型与隐式类型变量

Posted 类型

篇首语:少量的常识,当得大量的学问。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#中的匿名类型与隐式类型变量相关的知识,希望对你有一定的参考价值。

C#中的匿名类型与隐式类型变量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在C# 中引入了Linq 使得对集合的操纵发生了深刻的变化 这个变化的幕后英雄便是扩展方法和匿名类型 这里我们谈一谈C#中的匿名类型与隐式类型变量

  一 匿名类型

  所谓匿名类型顾名思义就是没有类型名称的一种特殊的数据类型 这意味着我们不能显式的引用这种类型的名称 事实上它是由编译器在后台声明并帮你生成必要的代码

  代码

  class Program

  

  public static void Main(string[] args)

  

  var T = new Index = Name = CPU Price = ;

  var T = new Index = Name = MethodBoard Price = ;

  var T = new T Index Name = SoundCard Price = ;

  

  

  以上我们用var 声明了 个隐式类型的变量T T T 并把创建(new)的 个匿名类型的实例分别赋给它们 在这里var相当于一个占位符 其变量(T T T )的具体的类型是在代码编译时确定的 也就是说由赋给它们的值的数据类型而定的 因而在最终生成的CIL中T T T 是有具体的类型的 也就是强类型的

  在上例中 我们可以看到T 中使用了T 的属性Index 这说明匿名类型的属性是完全可以访问的 它们使用了相同的属性名称 属性的数据类型也相同 并且属性的的顺序也是一致的 因而它们具有相同的类型 否则就不是兼容的类型了

  如以下均不是相同的类型了 其中T 与T 的属性不同 T 与T 的属性顺序不一样

  var T = new Index = Name = CPU Price = ;

  var T = new Index = Title = MethodBoard Price = ;

  var T = new T Index Price = Name = SoundCard ;

  匿名类型是 不可变 的 也就是说匿名类型的实例是不能够更改它的属性的 否则会造成编译错误 如

  var T = new Index = Name = CPU Price = ;

  T Index = ;//引发编译错误

  二 隐式类型变量

  隐式类型变量是用var关键字声明的局部变量 这个变量的具体类型是可以通过赋傎号右边的表达式推导出来的 其实在大多数情况下 隐式类型变量都是为匿名类型的实例而存在的

  隐式类型变量只能用于以下的场合

   局部变量声明

   for foreach 语句中变量声明

   using 语句初始化变量

  尤其要注意的是不能在类的字段中或方法的参数中使有隐式类型

  那么问题是有没有办法在创建匿名类型的方法内部 将其实例传到方法的外部呢?答案是肯定的 主要有两种方法

   利用object参数 因为隐式类型变量可以自动转换为objcet

  public void OutVarInstance (out object obj)//把匿名类型的实例传到方法外 使用object

  

  var v = new

  

  Name = ZYS

  Type = CEO

  ;

  obj=v ;

  

  在这里隐式类型变量可以自动的转换为object类型 当然对于调用者而言其操作仅限于object支持的那些

   利用方法类型推导 匿名类型的实例以一个方法的 类型参数 的形式来传递 编译器可以推导出具体的类型

  代码

  public void OutVarInstance ()//把匿名类型的实例传到方法外 使用 类型参数

  

  var v = new Title = Text = Ok ;

  Method(v );

  

  public void Method<T>(T input)

  

  Console WriteLine(string Format( Text out input));

  

cha138/Article/program/net/201311/12424

相关参考

知识大全 C#教程:隐式类型的局部变量

C#教程:隐式类型的局部变量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  隐式类型的局部变量 

知识大全 新增匿名类[1]

  一用var定义变量  在C#中提供了一种新的声明变量的方式这就是var通过这个关键字在声明变量时就无需指定类型了变量类型是在初始化时由编译器确定的代码如下:varss=abcd;MessageBo

知识大全 为什么匿名内部类参数必须为final类型

   在线文档阅读开发手记(一)) 从程序设计语言的理论上局部内部类(即定义在方法中的内部类)由于本身就是在方法内部(可出现在形式参数定义处或者方法体处)因而访

知识大全 在C语言中的实型变量分为2种类型,它们是()和()

在C语言中的实型变量分为2种类型,它们是()和()  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在C

知识大全 C#中的基元类型

C#中的基元类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这篇文章我想复习下C#中的基元类

知识大全 .net的编程之路(一)

  一预定义数据类型  char字符类型单引号例如charx=this;  c#中的每个数据类型其实就是一个静态的类每个变量都是一个类的实例  例如将int型的数据转化为stringstringx=i

知识大全 C# .Net中的类型转换

C#.Net中的类型转换  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  装箱拆箱还是别名  许多

知识大全 数据库中与C#中的数据类型对照

数据库中与C#中的数据类型对照  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ///<su

知识大全 C# .Net中的类型之间的转换

C#.Net中的类型之间的转换  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    装箱拆箱还是别

知识大全 C#中的类型相等与恒等(Equality & Identity)

C#中的类型相等与恒等(Equality&Identity)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看