知识大全 C#:什么时候应该使用var

Posted 变量

篇首语:守株待兔只能得一餐饱,主动出击方能丰衣足食。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#:什么时候应该使用var相关的知识,希望对你有一定的参考价值。

C#:什么时候应该使用var?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  C# 新增了关键字 var 在编译器能明确判断变量的类型时 它允许对本地类型进行推断 然而 对于何时应该使用它却存在某些争论 开发IDE工具的公司ReSharper的Ilya Ryzhenkov总结了使用var的一些好处

   它有利于更好地为本地变量命名

   它有利于设计更好的API

   它促使对变量进行初始化

   它消除了代码的混乱

   它不需要using指示符

  RSS Bandit的Dare Obasanjo对此则不敢苟同 由于var给他的开源项目(译注 RSS Bandit项目使用了ReSharper)带来了不利影响 他随后发表了对Ryzhenkov观点的回应 他回击道

  有趣的是 这里列出的所有 好处 主要针对的不仅是形式上的改进 而且它们之间还相互矛盾 例如 Ryzhenkov宣称var有利于对 更好地为本地变量命名 这实际上意味着迫使开发人员使用更长的匈牙利风格的变量命名 颇为滑稽的是 这种长的变量名完全会加剧代码的混乱 因为这样的变量名是随处可见的 相比而言 只有在声明变量的时候显示单个的类型名 会保持代码的整洁 那种var有利于 设计更好的API 的观点实际上如出一辙 因为这种观点主张 如果要求开发人员使用更长的描述性属性名(例如使用XmlNode XmlNodeName 而不是XmlNode Name) 就会达到改进的目的 或许应该有人告知ReSharper的人员 这种将类型信息编码到变量名中的方式实在是糟透了 而这也正是我们首选强类型编程语言例如C#的原因所在

  此外 鼓励变量初始化的主张也显得有些不可思议 因为C#编译器对此是强制要求的 更重要的是 在使用变量之前 通常需要将变量初始化为null 而var关键字对此却不支持

  官方C#语言参考中的一行内容佐证了Dare的观点

  过度使用var会使得源代码晦涩难懂 只有在必要的时候 才推荐使用var 也就是说当变量用来存储一个匿名类型或者匿名类型集合的时候

  对于那种var会降低代码可读性的抱怨 并非人人都赞同 Arnon Rotem Gal Oz写道

  对于代码可读性的主张 我更倾向于专注更加强大的方法 例如保持方法简短 有意义的方法和变量名 以及支持测试(这实际上可以帮助你理解代码是如何运作的……)不仅如此 如果你真的非常非常需要代码可读性 ReSharper工具可以在你的鼠标移动到var关键字之上时 告诉你它的类型;)

  Chris Sutton似乎更进一步 含蓄地指出类型是无关紧要的

  那么 我的建议是只有当你不知道类型的时候 才使用var 这里是我不同的见解和用法 请看如下代码片断

  var procs = from p in ServiceController GetServices()where p Status == ServiceControllerStatus Runningselect p;procs ToList() ForEach(p=> Console WriteLine(p ServiceName));

  procs的类型无疑为IEnumerable 然而这却与我无关 我首先关注的是procs是一个列表 列表中的每一项都具有一个属性ServiceName 潜在的类型对于编译器很重要 而那些不得不去阅读代码的人们却不是编译器 对吗?

cha138/Article/program/net/201311/12131

相关参考

知识大全 学C#委托的时候有点摸不著头脑

学C#委托的时候有点摸不著头脑  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  刚开始学到委托的时

知识大全 JavaScript中的关键字VAR使用详解 分享

JavaScript中的关键字VAR使用详解分享  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!JS

知识大全 c#调用外部程序

  //本来看似非常简单的程序是一个界面左边一个提示有个checkbox提示用户我知道了请不要再显示右边是运行QQ的一个按钮但是弄的时候弄了四个小时左右经常是调试的时候是对的但是有的时候点了按钮过后没

抄底指标

抄底指标:VAR1:=(C-REF(C,1))/REF(C,1);VAR2:=(INDEXC-REF(INDEXC,1))/REF(INDEXC,1);个股:=EMA(SUM(VAR1,20),5);

知识大全 C#特性学习与使用

C#特性学习与使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  C#特性以前的时候用过C#中的

知识大全 C#窗体的应用

C#窗体的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在做Winform窗体程序的时候遇

知识大全 php ci框架验证码实例分析

  php代码复制代码代码如下:<?phpclassCaptcha_codevar$width=;var$num=;var$height=;var$name=randcode;publicfun

知识大全 C#线程同步的方法总结

C#线程同步的方法总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们在编程的时候有时会使用

知识大全 C#变得越来越臃肿是不可避免的?

C#变得越来越臃肿是不可避免的?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!C#发布的时候我们回

知识大全 用Visual C#动态生成组件

用VisualC#动态生成组件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通常在写程序的时候