可能重复:
C# 3.0中var关键字的优势
昨天我偶然发现了来自微软的建议,建议我在任何可能的情况下都使用var:
http://msdn.microsoft.com/en-us/library/ff926074.aspx
我一直认为使用正确的类型有助于记录代码,并在编译时帮助查找错误。
这个建议背后的原因是什么?
最好 托马斯
可能重复:
C# 3.0中var关键字的优势
昨天我偶然发现了来自微软的建议,建议我在任何可能的情况下都使用var:
http://msdn.microsoft.com/en-us/library/ff926074.aspx
我一直认为使用正确的类型有助于记录代码,并在编译时帮助查找错误。
这个建议背后的原因是什么?
最好 托马斯
推荐的做法是:
当变量类型可以从赋值语句右侧明显看出,或者精确类型不重要时,使用隐式类型定义本地变量。
但并非总是如此。
同时还有以下建议:
在赋值语句的右侧无法明确看出类型时,不要使用 var。
来自同一来源的示例:
// When the type of a variable is not clear from the context, use an
// explicit type.
int var4 = ExampleClass.ResultSoFar();
var i = 1;
i
定义为类型为 int
。这与说 int i = 1;
是完全相同的,只是类型被隐含了。
同样地,下面的代码更易读:
var pairs = new List<pair<int, IEnumerable<string>>>();
List<pair<int, IEnumerable<string>>> pairs = new List<pair<int, IEnumerable<string>>>();
然而,结果却完全相同。
这是一种通过简化操作减少击键次数的语法糖。
编译器通过评估 RHS 表达式来推导 LHS 变量的类型。
因此,像下面这样的代码:
var fStream = new FileStream("file", Filemode.Open);
被编译器翻译为:
Filestream fstream = new FileStream("file", Filemode.Open);
我的经验法则:
如果代码是通用的,即将来更改类型后也可以正常工作,则应使用var
;如果代码是特定类型的,则不应使用var
。
使用 var 不会影响性能,因为编译器会完成所有工作。
它比键入 MyDatabaseModel model
更短。
使用 var 的另一个原因是你可以在右侧看到它是什么类型。
最后一个使用它的原因是匿名类型(每当你不知道类型时)。