13

可能重复:
var 关键字的意义何在?

不是在问它是如何工作的。我不是在问它是否会影响性能。我已经知道这些答案了。

我想知道最初是什么激发了 MS C# 团队将其添加到语言中。你不会在语言中添加琐碎的东西。它解决了一定有一个值得注意的问题。那是什么问题?

我见过的最接近“它解决的问题”的例子是使用匿名类型时,如下所示:

var linqResult = from element in SomeCollection s
                 elect new { element.A, element.B } 

这种用法具有讽刺意味的是,样式和编码标准指南(例如 Microsoft 提供的)建议编码人员在结果类型不明显时避免使用 'var'。换句话说,“var”的(大概)预期目的与编码标准指南相冲突。

如果我正在编写编码标准,并试图防止过度使用 'var',我会有点倾向于说“仅在响应匿名类型时使用 'var'”。但这带来了一个完整的问题:在语言中添加“var”的目的是什么?

4

4 回答 4

15

匿名类型是最重要的,但也减少了方法中的重复:

Dictionary<MyCustomType, List<MyOtherCustomType>> dict = new Dictionary<MyCustomType, List<MyOtherCustomType>>();
于 2011-02-16T18:35:56.750 回答
8

正是!匿名类型。如果没有var并且仍然有智能感知,你将如何保留对创建的匿名类型的引用?

换句话说:当没有 时var,就不会有任何匿名类型在我们现在拥有的编译时支持的可用意义上。匿名类型会出现太多运行时错误。

增加的(过度使用时的复杂性)是您可以将 var 与非匿名变量一起使用。当然可以,但这是一个坏习惯。

于 2011-02-16T18:34:13.963 回答
1

据我所知,通过启用匿名类型,var 关键字几乎可以使 LINQ 更容易

于 2011-02-16T18:34:22.480 回答
0

来自MSDN

在许多情况下,使用 var 是可选的,只是为了语法方便。但是,当使用匿名类型初始化变量时,如果以后需要访问对象的属性,则必须将该变量声明为 var。这是 LINQ 查询表达式中的常见场景。

于 2011-02-16T18:35:04.270 回答