Linq to Object 深入理解(一):了解Linq之前的基础知识

本文介绍了在理解Linq之前需要掌握的基础知识,包括隐式类型var的使用,如在Linq中发挥的优势;匿名类型的特性,如编译器生成的只读属性对象;扩展方法的本质和在Linq中的关键作用;以及类型推断在Linq实现中的重要性。这些概念为深入学习Linq奠定了基础。
摘要由CSDN通过智能技术生成

在我们去深入了解linq之前,有几个重要的基础需要先了解复习一下。

一、隐式类型var

var是C#3.0时新增的特性,现在这个var会大量的出现在我的代码中,首先,我先从实际的感受表达一下,这个关键字给我带来的实实在在的好处:

  1. 对于我这个懒惰的人来讲,这个关键字解救了我,假设你遇到这一行代码:ClassOuter.ClassInner1.ClassInner2.ClassInner3obj= CreateClassInner3(Param1,Param2,Param3,Param4);你在敲左边代码的时候是不是感觉有点痛苦,你必须要完整的打出变量的类型,可能这个变量的类型是很长很长,或者更尴尬的是,你可能记不清楚这个类型,相信你也会有这样的感觉,现在有了关键字,var obj=CreateClassInner3(param1,param2,param3,param4);就可以解决了,好爽,我又少敲了些代码,而且最重要的是,对于我这种赋值语句必须要在一行完成的强迫症的人来说,这太好了,即偷懒了,又美观,所以都交给编译器处理吧,话说微软貌似感觉想把程序员变的越来越依懒编译器了。
  2.  如果你觉得var只是微软想减轻程序员的工作,那就想的太简单了,现在看来,微软在提出var的时候是有野心,有目的,我想你已经猜出来了,对的,Linq(尽管当时Linq是在以C#3.5中提出的),在linq中var会发挥他强大的优势。

在这里,我不打算讲var的一些普通的特性,比如var的通用用法,比如减少程序员的工作量等,我打算重点讲的是针对于Linq部分var的强大,但是对于var 用法的一些注意点,还是要提一下,如下:

  1.  var只能出现在方法内部的变量声明,而不能作为类中字段类型的声明
  2. 使用var时,右边的表达工或者变量必须有明确的类型,例如,你不能这样使用var o=null; 此时 null 的含义不明,他可以看作是任务引用类型,因此编译器无法判断o具体的类型;
  3. 使用var时不能只声明,后定义,例如:  var o;
  4.  不要滥用var,并不是什么地方使用var都能带来好处的,站在开发过程中看来,貌似var 比大部分类型要精简很多,但是你想一下,你在写代码的时候,是很清楚你右边表达式的内容,但是另一个程序员在看你代码的时候,就会很痛苦了,因为他无法第一眼看出变量的实际类型,因此在实际的开过程中,除非很有必要(例如linq中,就不得不用var),开发准则中还是要求要写出完整的类型名。当然你自己写测试代码时就无所谓啦!

二、匿名类型

好了,我们到了var使用的重点了,匿名类型:

匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。类型名由编译器生成,并且不能在源代码级使用。每个属性的类型由编译器推断。

        我们先看下面一个例子:   

var o = new { Name = "Jack", Address = "SH", Age = 26 };

此时,编译器会替我们生成一个匿名类型:

  1. 这个匿名类型是基于泛型的,一共有三个泛型参数TName(代表Name的类型),TAddress(代表Address的类型),Tage(代表Age的类型)。
  2. 这个匿名类型有三个属性,Name,Address,Age。
  3. 这个匿名类型中的泛型参数编译器推断出TName为string,TAddress为string,TAge为int。
  4. Name、Address、Age这几个属性是ReadOnly的。
  5. 这个匿名类型中没有无参构造方法。
  6. 这个匿名类型中重写了ToString、GetHashCode、Equal方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值