隐式类型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

下一篇: Use var operator instead of class type