我通常创建一个这样的对象:
List<Student> students= new List<Student>();
但是当我在vs2012中安装resharper时,它建议我创建一个这样的对象:
var students= new List<Student>();
我想知道它们是否具有相同的效果。我认为它们具有相同的效果。当我使用var
时会更好吗?
答案 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
只是推断出类型。当结果类型非常明显时,您可以在这样的声明中使用它 - 它使代码更容易阅读,但不会对编译器产生影响。
另见: