为什么在可能的情况下应该使用隐式类型(var)?

6
5个回答

10

推荐的做法是:

编码规范 - 隐式类型的本地变量

当变量类型可以从赋值语句右侧明显看出,或者精确类型不重要时,使用隐式类型定义本地变量。

但并非总是如此。

同时还有以下建议:

在赋值语句的右侧无法明确看出类型时,不要使用 var。

来自同一来源的示例:

// When the type of a variable is not clear from the context, use an 
// explicit type. 
int var4 = ExampleClass.ResultSoFar();

4
使用隐式类型声明并不意味着变量没有强类型。它意味着编译器会从语句的右侧推断出变量的类型。
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>>>();

然而,结果却完全相同。


谢谢,这意味着,由于类型在编译时解析,任何对变量的误用(例如将其传递给具有其他类型的函数)都将被编译器检测到。 - Thomas
这是绝对正确的。编译器知道它是什么类型,你也知道它是什么类型。使用“隐式”类型只是一种快捷方式。 - Scott Earle

4

这是一种通过简化操作减少击键次数的语法糖。

编译器通过评估 RHS 表达式来推导 LHS 变量的类型。

因此,像下面这样的代码:

var fStream = new FileStream("file", Filemode.Open);

被编译器翻译为:

Filestream fstream = new FileStream("file", Filemode.Open);

编译器很友好,可以帮助我们完成一些打字工作。

2

我的经验法则:

如果代码是通用的,即将来更改类型后也可以正常工作,则应使用var如果代码是特定类型的,则不应使用var


0

使用 var 不会影响性能,因为编译器会完成所有工作。 它比键入 MyDatabaseModel model 更短。

使用 var 的另一个原因是你可以在右侧看到它是什么类型。

最后一个使用它的原因是匿名类型(每当你不知道类型时)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接