var
既不是类型,也不会使变量变得特别。它告诉编译器在编译时通过分析赋值运算符右侧的初始化表达式来推断变量的类型。
这两个表达式是等价的:
Tree t = new Tree();
和
var t = new Tree();
就我个人而言,我更喜欢var
在右侧明确提及类型名称或确切类型复杂且与 LINQ 查询返回的结果不真正相关时使用。这些 LINQ 结果通常只是进一步处理的中间结果:
var x = new Dictionary<string, List<int>>();
比下面的陈述更容易阅读,而且非常清楚:
Dictionary<string, List<int>> x = new Dictionary<string, List<int>>();
var query = someSource
.Where(x => x.Name.StartsWith("A"))
.GroupBy(x => x.State)
.OrderBy(x => x.Date);
这里query
是类型IOrderedEnumerable<IGrouping<string, SomeType>>
。谁在乎?
当类型名称没有出现在右侧并且很简单时,我更喜欢明确地编写它,因为它不会简化任何使用var
:
int y = 7;
string s = "hello";
当然,如果您创建匿名类型,则必须使用var
,因为您没有类型名称:
var z = new { Name = "Coordinate", X = 5.343, Y = 76.04 };
关键字与 LINQ 一起引入是var
为了简化它们的使用并允许动态创建类型以模拟您使用 SQL 的方式:
SELECT Name, Date FROM Person
var result = DB.Persons.Select(p => new { p.Name, p.Date });