哪一个更好或者更快才能声明一个变量?
var ds = new Class1();
OR
Class1 ds = new Class1();
我自己认为第二个应该更快,因为coz编译器不需要查找类型Class1
,但像ReSharper
这样的一些插件总是通知我将Class1
更改为{ {1}}。
谁能解释我为什么?
答案 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)
选择更具可读性的东西。在您的示例中,我认为第一个示例更具可读性且重复性更低。如果你没有在同一行上的类名(因为你正在将变量初始化为方法调用的结果,例如),那么我将使用类型名称声明样式使其显示给正在阅读代码的人