哪一个更好? “var”或“DataType”?

时间:2010-10-04 19:36:35

标签: c# variables .net-4.0 c#-4.0

哪一个更好或者更快才能声明一个变量?

var ds = new Class1();

OR

Class1 ds = new Class1();

我自己认为第二个应该更快,因为coz编译器不需要查找类型Class1,但像ReSharper这样的一些插件总是通知我将Class1更改为{ {1}}。
谁能解释我为什么?

6 个答案:

答案 0 :(得分:9)

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

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

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

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

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

答案 1 :(得分:5)

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

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

var conn = new System.Data.SqlConnection(connString);

击键次数少且易于阅读:

System.Data.SqlConnection conn = new System.data.SqlConnection(connString);

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

var someObj = new { Name = "Test", Saying = "Hello World!" };

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

答案 2 :(得分:4)

这仅仅是编译时的类型推断,因此没有性能成本。 “性能提升”是写var :()

更快

答案 3 :(得分:2)

作为一项规则,我倾向于在没有必要时使用var(使用匿名类型)并且类型名称不是非常复杂(Dictionary<int, List<Class.InnerClass<HashSet<SomeOtherClass>>>等)。

每当我听到这个建议时,请查看ReSharper在我的待办事项列表中稍微滑动一下。

答案 4 :(得分:2)

没有性能差异 - var的类型是在编译时确定的。

至于哪一个更好,这是一个偏好问题。就个人而言,如果代码清楚地标识var的类型,我更喜欢var。例如:


// very much preferred
var o = new System.blah.blah.Class1()

但是,如果你必须过多地考虑类型,那么就像def:

这样

  // I don't like this much because the return type isn't obvious
  var result = AMethodThatReturnsSomeKindOfValue()

答案 5 :(得分:1)

选择更具可读性的东西。在您的示例中,我认为第一个示例更具可读性且重复性更低。如果你没有在同一行上的类名(因为你正在将变量初始化为方法调用的结果,例如),那么我将使用类型名称声明样式使其显示给正在阅读代码的人