可能重复:
Use of var keyword in C#
相对较新的C#我想知道MS必须引入var
隐式类型变量的动机。文档说:
隐式类型的局部变量是强类型的,就像你一样 我自己声明了类型,但编译器确定了类型。
进一步说明:
在许多情况下,var的使用是可选的,只是一种语法 方便
这一切都很好,但在我看来,这只会引起混乱。
假设您正在审核此循环。
foreach (var item in custQuery){
// A bench of code...
}
我没有查看循环的内容和语义,而是花费宝贵的时间来寻找项目的类型! 我宁愿选择以下内容:
foreach (String item in custQuery){
// A bench of code...
}
问题是:我读到隐式类型变量在处理LINQ时有帮助,在其他场景中确实有用吗?
答案 0 :(得分:5)
引入LINQ时需要var
关键字,因此该语言可以为匿名类型创建强类型变量。
示例:
var x = new { Y = 42 };
现在x
是一个具有特定类型的强类型变量,但该类型没有名称。编译器知道x.Y
的含义,因此您不必像使用反射那样使用反射来获取对象中的数据:
object x = new { Y = 42 };
现在x
的类型为object
,因此您无法使用x.Y
。
当与LINQ一起使用时,它可以是这样的:
var x = from item in source select new { X = item.X, Y = item.Y };
x
变量现在是IEnumerable<T>
,其中T
是一个没有名称的特定类型。
由于引入了var
关键字,它还被用于使代码更具可读性,并被误用以保存击键。
使代码更具可读性的一个例子是:
var list =
new System.Collections.Generic.List<System.Windows.Forms.Message.Msg>();
而不是:
System.Collections.Generic.List<System.Windows.Forms.Message.Msg> list =
new System.Collections.Generic.List<System.Windows.Forms.Message.Msg>();
这是var
关键字的良好用法,因为语句中已存在该类型。关键字可能被滥用的情况如下:
var result = SomeMethod();
由于SomeMethod
名称并未表明它返回的类型,因此变量的类型并不明显。在这种情况下,您应该写出类型,而不是使用var
关键字。
答案 1 :(得分:2)
我认为一些动机是允许这样的事情 -
List<int> list = new List<int>();
要变成这个 -
var list = new List<int>();
第二个例子更短,更易读,但仍清楚地表达了代码的意图。有些情况会不太清楚,但在很多情况下,你会得到简洁而不会失去清晰度。
答案 2 :(得分:1)
var,在Linq中使用了一些:
var results =
from item in context.Table
select new {Name=item.Name, id=item.id};
由于集合是匿名类型,因此无法命名。它具有一个真实类型,但在编译之前没有一个具有名称的类型。