【发布时间】:2012-09-16 15:53:05
【问题描述】:
昨天我偶然发现了来自 MS 的建议,我应该尽可能使用 var:
http://msdn.microsoft.com/en-us/library/ff926074.aspx
我一直认为使用正确的类型有助于记录代码,也有助于在编译时发现错误。
这个推荐背后的原因是什么?
最好的 托马斯
【问题讨论】:
标签: c# implicit-typing
昨天我偶然发现了来自 MS 的建议,我应该尽可能使用 var:
http://msdn.microsoft.com/en-us/library/ff926074.aspx
我一直认为使用正确的类型有助于记录代码,也有助于在编译时发现错误。
这个推荐背后的原因是什么?
最好的 托马斯
【问题讨论】:
标签: c# implicit-typing
推荐有:
Coding Convention - Implicitly Typed Local Variables
当变量的类型为局部变量时使用隐式类型 从作业的右侧明显,或者当 类型不重要。
并非总是如此。
还有:
当类型从右侧不明显时,不要使用 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 不会影响您的性能,因为编译器会完成所有工作。
它比输入MyDatabaseModel model 更短。
使用 var 的另一个原因是,您可以在右侧看到它是哪种类型。
使用它的最后一个原因是匿名类型(只要您不知道类型)。
【讨论】: