var vs explicit declaration
Possible Duplicate:
Use of var keyword in C#
你好,刚搬了工作,我已经习惯了经常使用var。在我以前的工作中,我们做了很多TDD和使用Resharper。
在这项工作中,他们讨厌第三方工具,这里的开发人员说,一直使用var并不好,而且效率不如显式键入。
以前我也这么想,但现在我已经习惯了,这让我的代码看起来更整洁了。
我读过一些帖子,似乎很困惑它是否有效。我读到使用var生成相同的IL代码。那么,它是否应该不那么有效呢?在其他地方,我读到,即使使用var生成相同的IL代码,也必须找出它是什么类型。那么"推断"到底是什么意思呢?
一些关于性能是否明智的澄清,它们是相同的,将是非常好的。
- "在这项工作中,他们讨厌第三方工具",我曾经是其中之一,为了保持头脑清醒,用我的时间做更重要的事情,使代码管理更容易/更干净和一致,不能使用Resharper或任何第三方工具来提供优势。仅仅是讨厌使用某种东西并不是阻止别人使用它的原因。
在执行时间效率方面,没有区别。它确实被编译成完全相同的IL。变量仍然是静态类型的,只是类型是从初始化表达式推断出来的。
"推断"是指"根据其他信息得出"。因此,如果声明是:
变量x显式声明为string类型。编译器不需要计算出任何东西。如果您使用var:
然后编译器找到要分配的表达式的编译时类型,并使其成为变量的类型。x仍然是代码中其他地方的字符串变量。
如果与您合作的开发人员认为var的行为是动态的,那么我会非常谨慎地考虑他们告诉您的其他信息。您可能希望谨慎地建议他们在判断新语言功能之前,先了解一些新语言功能的工作原理。
就开发人员的效率而言,这是一个更难判断的问题。就我个人而言,我使用var相当多——尤其是在测试中——但并非无处不在。
- 非常感谢您提供非常详细的答案。非常感谢。我不是在任何地方都使用它,只是让生活更容易。正如您所指出的,性能方面没有差异,那么为什么不呢?再次感谢您的时间。
- 所以说使用显式类型变量和使用var的编译性能优势很小是正确的吗?(运行时性能相同是有意义的。)
- @埃德加:我不想说编译性能的好处。如果它们存在的话,我怀疑它们对于合理的代码来说是可测量的,如果没有任何证据,我也不想预测收益会朝哪个方向发展。
var在compilation期间被转换成精确的类型,据我所知,效率没有问题。
此代码的IL如下所示:
1 2 3 4 5 6 7 8
| class Foo
{
void Bar()
{
var iCount = 0;
int iCoount1 = 0;
}
} |