关于性能:C#’var’关键字与明确定义的变量

C# 'var' keyword versus explicitly defined variables

本问题已经有最佳答案,请猛点这里访问。

我目前正在使用Resharper的30天试用期,到目前为止,我对它的建议印象深刻。然而,有一个建议让我困惑。

当我显式定义变量时,例如:

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

重新竖起一条弯弯曲曲的绿线,告诉我:

Use implicitly type local variable declaration.

如果我遵循它的建议,resharper将代码行更改为:

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

那么,将List改为var是否会带来某种性能提升,或者这仅仅是resharper的一个特性?我一直被教导,明确定义一个变量,而不是使用一个动态变量,更为理想。


So, is there some sort of performance gain to be had from changing the List to a var

不,但这不是重构的唯一有效原因。更重要的是,它消除了冗余,使代码更短,而不会失去清晰度。

I've always been taught that explicitly defining a variable, rather than using a dynamic, is more optimal.

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

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

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

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


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

只是风格问题。

var的优点是,您可以更容易地更改函数的返回类型,而不必更改源代码的其他部分。例如,将返回类型从IEnumerable更改为List。但是,它可能使引入错误变得更容易。


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

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


更少的类型=更多的生产力:)