隐式类型var
本文关键字:var 类型 | 更新日期: 2023-09-27 18:15:42
可能重复:
var关键字在C#中的使用
作为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
是一个具有特定类型的强类型变量,但没有该类型的名称。编译器知道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
关键字。
我认为一些动机是允许这样的东西-
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};
由于集合属于匿名类型,因此无法对其进行命名。它具有真实类型,但在编译之前没有名称。