哪一个更好?"var"或"DataType"?

Dr *_* TJ 1 c# variables .net-4.0 c#-4.0

声明变量哪个更好或更快?

var ds = new Class1();
Run Code Online (Sandbox Code Playgroud)

要么

Class1 ds = new Class1();
Run Code Online (Sandbox Code Playgroud)

我自己相信第二个应该是更快的coz编译器不需要查找类型Class1,但一些插件ReSharper总是通知我Class1改为var.
谁能解释我为什么?

Jon*_*eet 9

他们编译到同一个IL,所以两者都不会更快.但是,可读性可能会有很大差异.

倾向于明确声明变量的类型,但var如果以下任何一种情况适用,请使用:

  • 我正在调用构造函数,类型名称很长(特别是泛型)
  • 我正在使用匿名类型
  • 类型名称相当长,初始化表达式很长,但仍然非常清楚它将返回什么类型
  • 我想强调代码的目的而不是它如何实现其结果

与许多可读性问题一样,关于在哪里使用var- 从"无处"到"无处不在" ,存在广泛的意见.请注意,您可以在选项中更改ReSharper为您推荐的内容.(我似乎记得在默认情况下它"推荐"两种方式 - 所以真的只是让你更容易切换.)

几个答案提到了所涉及的击键次数.我认为这是最不利的理由var.如果有的话,我很少会在打字速度方面遇到瓶颈.我的编码速度在很大程度上取决于我对问题领域的理解,以及我能够清楚地想象解决方案.我宁愿输入2000次击键,但最终还是采用了优雅的设计,实际上用100个字符表示,而不是只用500个键击来设置不太可读的500字符.考虑一下阅读代码所花费的时间,而不是打字的机制.


Jus*_*ner 5

他们都编译成同样的东西.使用时var,您只需让编译器在编译时推断出类型.这可能会增加一点编译时间(我实际上没有测试过那部分),但在运行时没有任何影响.

前者(我个人更喜欢)的优点是当你开始处理长类型名称时:

var conn = new System.Data.SqlConnection(connString);
Run Code Online (Sandbox Code Playgroud)

击键次数更少,阅读更容易:

System.Data.SqlConnection conn = new System.data.SqlConnection(connString);
Run Code Online (Sandbox Code Playgroud)

此外,没有var使用匿名类型几乎是不可能的:

var someObj = new { Name = "Test", Saying = "Hello World!" };
Run Code Online (Sandbox Code Playgroud)

有时我宁愿使用完整的类型名称而不是var.最值得注意的是处理方法的返回值时.如果从方法的名称不清楚返回值的类型是什么,我将明确定义它.如果发生任何变化,这可以减少混乱.

  • @Dr TJ:如果您稍后更改定义,那么键入的次数会减少,并且您输入类型错误的可能性会降低. (3认同)