隐式类型var
可能重复:
在C#中使用var关键字
对C#来说相对陌生,我想知道MS不得不引入var
隐式类型变量的动机。 该文件说:
一个隐式类型的局部变量是强类型的,就像你自己声明了类型一样,但是编译器决定了类型。
进一步的一些行:
在许多情况下,var的使用是可选的,只是语法上的便利
这很好,但在我看来,这只会造成混乱。
假设你正在检查这个循环。
foreach (var item in custQuery){
// A bench of code...
}
而不是审查循环的内容和语义,我会浪费宝贵的时间寻找物品的类型! 我宁愿改为:
foreach (String item in custQuery){
// A bench of code...
}
问题是:我读过隐式类型变量在处理LINQ时的帮助,是否真的有助于在其他场景中使用它?
引入LINQ时需要var
关键字,以便该语言可以为匿名类型创建强类型变量。
例:
var x = new { Y = 42 };
现在x
是一个具有特定类型的强类型变量,但没有该类型的名称。 编译器知道xY
是什么意思,所以你不需要使用反射来获取对象中的数据,就像你会这样做:
object x = new { Y = 42 };
现在x
是类型object
,所以你不能使用xY
。
当与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
关键字。
我认为一些动机是允许这样的事情 -
List<int> list = new List<int>();
变成这个 -
var list = new List<int>();
第二个例子更短,更具可读性,但仍清晰地表达了代码的意图。 有些情况下它不太清楚,但是在很多情况下,你会得到简洁而不会失去清晰度。
var对于匿名类型是非常必要的,这在Linq中有点用了:
var results =
from item in context.Table
select new {Name=item.Name, id=item.id};
由于该集合是匿名类型,因此无法命名。 它有一个真实的类型,但没有一个在编译之前有一个名字。
链接地址: http://www.djcxy.com/p/53821.html上一篇: implicit type var