我目前正在使用ReSharper的30天试用版,到目前为止,我对其提出的建议印象深刻。然而,有一个建议让我很困惑。
当我明确定义变量时,例如:
List<String> lstString = new List<String>();
ReSharped添加了一条波浪形的绿线并告诉我:
使用隐式类型本地变量声明。
如果我遵循其建议,ReSharper会将代码行更改为:
var lstString = new List<String>();
那么,将List<String>
更改为var
会有什么样的性能提升,还是仅仅是ReSharper的特性?我一直被教导明确定义变量而不是使用动态更为优化。
答案 0 :(得分:61)
那么,将List更改为var
是否会带来某种性能提升
不,但这不是重构的唯一正当理由。更重要的是,它消除了冗余并使代码更短,而且没有任何清晰度的损失。
我一直被教导明确定义变量而不是使用动态更为优化。
你误解了var
的含义。这是不以任何方式动态,因为它产生相同的输出。它只是意味着编译器自己计算变量的类型。它显然能够这样做,因为这是用于测试类型安全性和正确性的相同机制。
它还删除了完全无用的代码重复。对于简单类型,这可能不是很多。但请考虑:
SomeNamespace.AndSomeVeryLongTypeName foo = new SomeNamespace.AndSomeVeryLongTypeName();
显然,在这种情况下,加倍名称不仅是不必要的,而且实际上是有害的。
答案 1 :(得分:12)
不。它们发出完全相同的IL 。
这只是风格问题。
var
的好处是,您可以更轻松地更改函数的返回类型,而无需更改源代码的其他部分。例如,将返回类型从IEnumerable<T>
更改为List<T>
。但是,它可能会更容易引入错误。
答案 2 :(得分:8)
var
关键字实际上并未声明具有动态类型的变量。该变量仍然是静态类型的,它只是从上下文中推断出类型。
当你有一个很长的类型名称(通用类型名称可能很长)时,这是一个很好的快捷方式
答案 3 :(得分:1)
减少输入=提高生产力:)。