快速业务通道

C#教程:隐式类型的局部变量

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-14
样的做法也适用于null的情况——你应该将null转换为适当的类型. 另外我们也可以使用方法调用值或者属性作为初始化表达式——指向常量或者构造器调用也是没有问题的. 例如, 可以使用下列的代码:

   1: var args = Environment.CommandLine;

在这个例子中, args将会被初始化为string[]类型.实际上, 将方法调用的返回值赋给一个变量在LINQ to SQL当中几乎是最常用的一种情景. 另外, 还有一点也是值得注明一下的, 在using, for, foreach的头一个部分使用var声明是被允许的, 例如:

   1: for (var i = 0; i < 10; i++)
   2: using (var x = File.OpenText("test.dat"))
   3: foreach (var s in Environment.CommandLine)

上述代码中的变量将会各自结束于int, StreamReader和string类型. 当然, 仅仅是被允许这么做并不意味着你就应该要这样做. 让我们来看一下支持和反对使用隐式类型声明的理由.

隐式类型声明的好与坏

使用隐式类型声明的主要理由(先排除匿名类型)是它减少了大量的代码输入, 同时屏幕上可见的代码数量也变多了:) 特别是当类型名包含泛型的时候可能会很长, 因为太长你可能会使用一行来声明变量, 另外一行用于初始化表达式. 另外的一种选择使用别名, 但那样的话为了要看到变量的真实类型你可能要经过一道长长的路途(无法在查看变量的时候就知道其真实类型). 相反, 如果使用var, 这一切都迎刃而解, 代码也更少, 编辑器也可以及时告诉你具体的变量类型.

所有的这些听起来都不错, 那么我们有什么理由来反对使用隐式类型声明呢? 可读性!其几乎是反对使用隐式类型声明最重要的一个理由. 对于没有使用显式声明的变量来说, 代码可能会更难读一点. 它打破了”我们声明的是什么类型, 那么其就应该始于对应的初始值”的思维, 这使得声明初始化完全分离了. 至于难读的程度则去取决于读者和初始化表达式所包含的代码. 如果是显式调用一个构造器, 那么这可以非常明显的知道你要创建的是什么类型. 如果是调用一个方法或者使用一个属性, 则取决于返回类型是否足够明显. 下面整数型的列子显示了推断类型比显式声明更加困难, 多快你可能区分中每一种类型所对应的真实类型?

   1: var a = 2147483647;
   2: var b = 2147483648;
   3: var c = 4294967295;
   4: var d = 4294967296;
   5: var e = 9223372036854775807;
   6: var f = 9223372036854775808;

答案是int, uint, long, long和ulong. 这

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号