使用Linq,范围变量(e)可以从它来自的数组/集合(emps)隐式地键入,但是foreach语句不能在没有var关键字的情况下执行相同的操作,或者类型。为什么是这样?Linq implicity输入的范围变量
在ex1中,编译器知道e是Employee类型,没有给出var关键字或任何东西。为什么ex2中的foreach循环不能做同样的事情,你必须提供类型(无论是var还是某种类型)。
ex1。
Employee[] emps = {new Employee (1, "Daniel", "Cooley", 7, 57.98M };
public void SortByLastname()
{
var sortedByLastname =
from e in emps
orderby e.LastName
select e.FirstName;
}
ex2。
foreach (Employee empl in emps)
{
Console.WriteLine("Employee " + empl);
}
这可能是过分分析,但我试图找到为什么这是这种情况的底部。
答案很可能是Linq查询语法设置为自动推导范围变量的类型,而foreach语句不是。有人可以帮助解释这是为什么吗?
我不相信ex1是正确的 - 它不会编译。你不是指Employee [] emps = new [] {new Employee(...)}; ...并且在你的第二个例子中... foreach应该没有问题推断T []或任何IEnumerable ...所以我不确定我是否理解你描述的问题。 –
Jeff
2012-03-21 04:25:48
对不起,先在这里发帖,以便习惯网站的工作方式。是的,第二个示例并不意味着与第一个坏的应该只是把数组放在foreach中而不是linq结果。 – mgmedick 2012-03-21 04:39:34
我更新了你的代码,以反映这一点,我的回答:) – 2012-03-21 04:47:26