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