由关键字var引起的思考 Anny

在c#中,var的引入是在3.0的时候,但是到目前为止除了在linq中使用之外,没在其他地方使用过。

c#是强类型的语言,引入var的目的是为了支持匿名数据类型,借用var声明的变量用于方法内部,在初始化的时候赋值,经编译器第一次编译后,其数据类型被确定,为了代码的可读性和后期的可维护性,一般在不必要的时候不推荐使用匿名数据类型,在必须的时候才去使用。那么什么是必须的时候呢?开发人员对所使用的数据类型不明确,并且编译器可以根据上下文确定该数据类型的时候。比如使用linq的时候,

var students = from s in Students  
               
where s.Name="allie"  
               
select new { s.Sex, s.Age }; 

我们只有关于Student类的定义,而没有关于性别和年龄两个属性的类的定义,而我们又不需要定义这么一个类,所以这个时候我们就可以使用关键字var来声明students变量,由编译器自动产生一个泛型类型(s.Sex, s.Age 参数名称,个数不变就不会产生更多的类型)

如果不考虑代码的可读性,使用var的确很方便,可以少写很多代码的哦。

之所以这次会着重看下var,是因为同事碰到一个问题,他的代码大概是这样的,

Hashtable htable = new Hashtable();
htable.Add(1, 2);

foreach (var item in htable)
{

//item.key="xxx";
}

同事喜欢用var,他写这个的目的就是想遍历hashtable里的各个item的key和value,然后作对应的操作,可是,这样写的结果是item下边根本就没有key或者value的属性(智能提示中看不到)。这个我目前还不知道为什么,只是建议他把var改称了DictionaryEntry这种显式的声明,就可以了。

在这里,在说点别的,其实,平常我习惯于用Dictioary<key,value>来代替hashtalbe,感觉性能总会比hashtable好一些(没有测试过,只是觉得它应用了泛型,省去了拆箱装箱操作)

相关联接:

http://stackoverflow.com/questions/902563/the-evilness-of-var-in-c

http://www.cnblogs.com/jhh0111/archive/2008/10/23/1318223.html

http://www.cnblogs.com/yuyijq/archive/2008/07/16/1244460.html

http://www.qqread.com/csharp/p408564.html

原文地址:https://www.cnblogs.com/limei/p/1781587.html