在与同事讨论了在C#3中使用'var'关键字后,我想知道人们对通过var的类型推断的适当用途有什么看法?
例如,我在可疑情况下懒得使用var,例如: -
foreach(var item in someList) { // ... } // Type of 'item' not clear.
var something = someObject.SomeProperty; // Type of 'something' not clear.
var something = someMethod(); // Type of 'something' not clear.
Run Code Online (Sandbox Code Playgroud)
var的更合理用途如下: -
var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.
Run Code Online (Sandbox Code Playgroud)
有趣的是LINQ似乎有点灰色,例如: -
var results = from r in dataContext.SomeTable
select r; // Not *entirely clear* what results will be …Run Code Online (Sandbox Code Playgroud) 我目前正在使用ReSharper的30天试用版,到目前为止,我对它的建议印象深刻.然而,一个建议让我感到困惑.
当我明确定义变量时,例如:
List<String> lstString = new List<String>();
Run Code Online (Sandbox Code Playgroud)
ReSharped添加了一条波浪形的绿线并告诉我:
使用隐式类型本地变量声明.
如果我按照其建议,ReSharper将代码行更改为:
var lstString = new List<String>();
Run Code Online (Sandbox Code Playgroud)
那么,从改变List<String>到a 是否会有某种性能提升var,或者这仅仅是ReSharper的一个特点?我一直被教导明确定义变量而不是使用动态更为优化.
我能看到的唯一优势:
var s = new ClassA();
Run Code Online (Sandbox Code Playgroud)
过度
ClassA s = new ClassA();
Run Code Online (Sandbox Code Playgroud)
如果你决定要ClassB,那么你只需要更改声明的RHS即可.
我想如果你通过集合枚举,你也可以只是'var',然后再计算出类型.
是吗?还有一些其他巨大的好处,我的虚弱的头脑没有看到?