我的代码之间有什么区别?

时间:2014-05-03 09:27:31

标签: c#

我通常创建一个这样的对象:

List<Student> students= new List<Student>();

但是当我在vs2012中安装resharper时,它建议我创建一个这样的对象:

var students= new List<Student>();

我想知道它们是否具有相同的效果。我认为它们具有相同的效果。当我使用var时会更好吗?

5 个答案:

答案 0 :(得分:3)

是一样的。但是,唯一的区别是,编译器确定变量的类型。

C#编译器如何知道变量的类型?

C#编译器从中推断出变量的类型  右侧表达。例如,students的类型是从右侧表达式new List<Student>()的类型推断出来的,这使得students成为  List<Student>()

答案 1 :(得分:3)

没有区别,通过键入var而不是您正在使用的数据类型,您只需使编译器看起来并自己设置数据类型。它使代码更短一些,但在我看来,编写数据类型全名而不是var。

更好

答案 2 :(得分:3)

正如Brad Smith http://www.brad-smith.info/blog/archives/336所建议的那样: -

  
    

一些程序员似乎倾向于为每个人使用var     变量声明。当然,语言不会阻止你做     事实上,MSDN承认这是一种“语法上的便利”......     但它也强烈警告说:

         
      

使用var确实至少具有制作代码的潜力       其他开发人员更难理解。是因为,       C#文档通常仅在需要时才使用var。

             

Implicitly Typed Local Variables(C#编程指南),MSDN

    
         

我最近发现了常用的ReSharper工具     实际上要求自由使用var。坦率地说,这没有帮助     情况。有些开发商试图争论立场     var以某种方式提高了可读性和更广泛的编码实践,     比如这篇文章:

         
      

通过使用var,你迫使自己更多地考虑你的方式       命名方法和变量,而不是依赖于类型系统       提高可读性,更多的是实现细节......

             

var improves readability,Hadi Hariri

    
         

我同意上面引用的前提,但不是最后的结论     结果。相反,var的过度使用和误用会导致     一些非常坏的习惯...

         

让我们来看看反对广泛使用var的论点(和for     它的节约,正确使用):

         

隐式类型变量会失去描述性

         

类型名称在本地提供了额外的描述层     变量声明:

  
// let's say we have a static method called GetContacts()
// that returns System.Data.DataTable 
var individuals = GetContacts(ContactTypes.Individuals); 

// how is it clear to the reader that I can do this?  
return individuals.Compute("MAX(Age)", String.Empty); 
     
    

上面我的变量名称是完全描述性的;它区别     在使用GetContacts()填充的任何其他变量之间     DataTable类型的其他变量。当我操作变量时,我     我知道这是我所指的个人联系人     我从他们那里得到的任何东西都属于这种背景。但是,没有     在声明中指定类型名称,我输了     它提供的描述性......

  
 // a more descriptive declaration  
 DataTable individuals = GetContacts(ContactTypes.Individuals) 
     
    

当我重新审视这段代码时,我不仅知道了什么     变量在概念上代表,但也代表它的表示     结构和用途;上一个例子中缺少的东西。

  

答案 3 :(得分:2)

var只是syntactic sugar。它别名任何类型。在您的情况下,它们之间没有区别。它们都生成相同的Intermediate Language代码。

使用var只是说:&#34; 嘿编译器,只需确定此变量的类型&#34;

答案 4 :(得分:1)

var只是推断出类型。当结果类型非常明显时,您可以在这样的声明中使用它 - 它使代码更容易阅读,但不会对编译器产生影响。

另见: