C#'var'关键字与明确定义的变量

时间:2009-01-09 19:50:33

标签: c# performance resharper

我目前正在使用ReSharper的30天试用版,到目前为止,我对其提出的建议印象深刻。然而,有一个建议让我很困惑。

当我明确定义变量时,例如:

List<String> lstString = new List<String>();

ReSharped添加了一条波浪形的绿线并告诉我:

  

使用隐式类型本地变量声明。

如果我遵循其建议,ReSharper会将代码行更改为:

var lstString = new List<String>();

那么,将List<String>更改为var会有什么样的性能提升,还是仅仅是ReSharper的特性?我一直被教导明确定义变量而不是使用动态更为优化。

4 个答案:

答案 0 :(得分:61)

  

那么,将List更改为var

是否会带来某种性能提升

不,但这不是重构的唯一正当理由。更重要的是,它消除了冗余并使代码更短,而且没有任何清晰度的损失。

  

我一直被教导明确定义变量而不是使用动态更为优化。

你误解了var的含义。这是以任何方式动态,因为它产生相同的输出。它只是意味着编译器自己计算变量的类型。它显然能够这样做,因为这是用于测试类型安全性和正确性的相同机制。

它还删除了完全无用的代码重复。对于简单类型,这可能不是很多。但请考虑:

SomeNamespace.AndSomeVeryLongTypeName foo = new SomeNamespace.AndSomeVeryLongTypeName();

显然,在这种情况下,加倍名称不仅是不必要的,而且实际上是有害的。

答案 1 :(得分:12)

不。它们发出完全相同的IL

这只是风格问题。

var的好处是,您可以更轻松地更改函数的返回类型,而无需更改源代码的其他部分。例如,将返回类型从IEnumerable<T>更改为List<T>。但是,它可能会更容易引入错误。

答案 2 :(得分:8)

var关键字实际上并未声明具有动态类型的变量。该变量仍然是静态类型的,它只是从上下文中推断出类型。

当你有一个很长的类型名称(通用类型名称可能很长)时,这是一个很好的快捷方式

答案 3 :(得分:1)

减少输入=提高生产力:)。