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,这可能是明智的。
综上所述,基于上述示例,我建议对Carte blanche进行应用var
并不是一个好主意,因为大多数事情最好适度地进行,并且要根据此处显示的情况来完成。
为什么默认情况下Resharper会全部使用它?我建议您放轻松一点,因为它无法解析情况的细微差别,以决定何时最好不使用它。