隐式类型的局部变量
你去看帮助或msdn

解决方案 »

  1.   

    var可以让编译器替你推出parms类型
    减少代码量,提高可读性
      

  2.   

    C# 3新增了关键字“var”。在编译器能明确判断变量的类型时,它允许对本地类型进行推断。然而,对于何时应该使用它却存在某些争论。 
    开发IDE工具的公司ReSharper的Ilya Ryzhenkov总结了使用var的一些好处 :1. 它有利于更好地为本地变量命名。2. 它有利于设计更好的API。3. 它促使对变量进行初始化。4. 它消除了代码的混乱。5. 它不需要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.Running
    select p;
    procs.ToList().ForEach(p=> Console.WriteLine(p.ServiceName));procs的类型无疑为IEnumerable,然而这却与我无关。我首先关注的是procs是一个列表,列表中的每一项都具有一个属性ServiceName。潜在的类型对于编译器很重要,而那些不得不去阅读代码的人们却不是编译器,对吗?
      

  3.   

    编译器可以帮你识别出类型。用过JAVASCRIPT应该知道,里面所有变量声明全部用var。。
      

  4.   

    .NET4.0推出的dynamic关键字和var关键字功能差不多,但是dynamic是在运行时去动态识别类型。
      

  5.   

    http://blog.csdn.net/csdbfans/article/details/5939093
      

  6.   

    http://blog.csdn.net/csdbfans/article/details/5939093
      

  7.   

    不知道为什么加这个类型
    也是我的水平太低了,int 型就是int,string就是string,
    我觉得加了这个东西和vb一样,纯粹微软觉得现在服务器的内存多了,cpu快了加点难度,让程序跑的慢了否则许多用c++,C的地方都让C#解决了,会有垄断的嫌隙
      

  8.   

    貌似是动态类型吧 能装int string 等等各种类型的东西
      

  9.   

    简化代码编辑量:
    Dictionary<SomeVeryLargeClass, List<SomeVeryLargeSubClass>> a = new Dictionary<SomeVeryLargeClass, List<SomeVeryLargeSubClass>>();
    -->
    var a = Dictionary<SomeVeryLargeClass, List<SomeVeryLargeSubClass>>;
      

  10.   

    很多时候是可以简化代码的.
    除了常用的int,string,bool外,我在想要获取各种表格控件内容的集合时,就都可以用var来定义,而不需要事先查找我要获取的内容到底是个什么类型,再定义个对应类型的变量来存放它.当然如果你连最基础的类型,比如int,string,bool,datetime,datatable,dataset,全部都用var来定义,不可避免的会造成混乱.所以再好的东西使用起来也要有个限度.
    没有最好的方式,只有最适合的方式.
      

  11.   

    而且var存在的一个最大的问题,它的初始化只跟你初始化时的赋值有关,而编译器不知道你在具体想用的时候到底要什么类型.比如我想用个float类型的变量,
    我可以定义float f=0;
    但是如果定义成var f=0;编译器会认为f是个int型,我必须使用var f=0f;才行.如果是long型,也存在此问题,初始化的时候我就必须先放入一个long型的数据进去,否则被初始化为int型,我再给它重新赋值为long型,数据就溢出了.
      

  12.   

    隐式类型局部变量。就是说局部变量的数据类型不显示指定而是由等于号右边决定。
    这个是3.0后加的特性,主要是编码方便,编码的时候一些类型你可以不用打出来,而是由等号右边的类型决定。以前变量声明和初始化是如此:List<DbParameter> parms = new List<DbParameter>( );
      

  13.   

    var 是个好东西,偷懒神器。又不是影响效率。特别是在使用linq时,要是不用var的话,就定义一个变量就写死你
      

  14.   

    var的首要动机是配合匿名对象!!!!!!!!!!!
      

  15.   

    比如。。var a=new{ name="123"};或者
    int[] array={1,2,3};
    var a= array.select(x=>new{ id=x,value=x});无可替代
      

  16.   

    LZ你确实层次有点低,现在你觉得没有用,等你学了LINQ的时候就知道这个干啥用了,var是推导类型,当你生成一个一次性类的时候用这个很方便,尤其是后面还有个东西叫匿名类,只能用推导类型来接受
      

  17.   

    是一种弱类型吧,好像linQ用得比较多
      

  18.   

    除了new(包括匿名类型),我都很反感var,因为维护的时候不能一眼看出真实类型,可能造成思路断点甚至是理解错误。
    放低一些要求,某些常用函数调用可以适当使用var,因为大多数人都明确知道返回值类型,但是常用是个主观概念。
    如果是不需要维护的一次性代码,你想怎么弄都请便。