var
可以增加代码的可读性,同时降低对代码的直接理解。同样,它会降低代码在其他情况下的可读性。有时它的使用是中性的。对理解的可读性的衡量不是成比例的,而是取决于情况。有时两者一起增加或减少。
因素是var
应用到什么,以及目标支持对读者立即混淆其数据类型的能力,或者是否需要其类型信息来理解手头的程序部分。
例如,错误的命名会导致var
代码理解能力下降。但这不是var
' 的错:
var value1 = GetNotObviousValue(); //What's the data type?
//vs.
var value2 = Math.Abs(-3); // Obviously a numeric data type.
有时,var
当代码在没有它的情况下更具可读性时,将其用于简单的数据类型是没有意义的:
var num = GetNumber(); // But what type of number?
// vs.
double num = GetNumber(); // I see, it's a double type.
有时var
隐藏您不一定关心查看复杂性的数据类型信息可能很有用:
IEnumerable<KeyValuePair<string,List<Dictionary<int,bool>>>> q = from t in d where t.Key == null select t; // OMG!
//vs.
var q = from t in d where t.Key == null select t;
// I simply want the first string, so the last version seems fine.
q.First().Key;
当存在匿名类型时必须使用,因为没有类型名称可以通过以下方式调用它:var
var o = new { Num=3, Name="" };
当你让 Visual Studio Intellisense 提供类型信息时var
,你需要通过严格的代码阅读来减少对你的理解的依赖,而无需帮助。假设不是每个人都可能拥有或使用 Intellisense 可能是明智的。
总之,基于上述示例,我建议全权委托应用var
不是一个好主意,因为大多数事情最好适度完成,并根据手头的情况进行,如此处所示。
为什么 Resharper 默认全部使用它?我建议轻松一点,因为它无法解析情况的细微差别来决定何时最好不要使用它。