我试图训练下面的例子但是为SkipWhile()操作得到奇怪的输出它没有显示预期的输出。有人可以解释原因吗?
List<Employees> emp = new List<Employees>();
emp.Add(new Employees() { EmpId = 1, DeptId = 1, Salary = 20000 });
emp.Add(new Employees() { EmpId = 2, DeptId = 2, Salary = 1000 });
emp.Add(new Employees() { EmpId = 3, DeptId = 1, Salary = 3000 });
emp.Add(new Employees() { EmpId = 4, DeptId = 3, Salary = 5000 });
emp.Add(new Employees() { EmpId = 5, DeptId = 2, Salary = 4000 });
var hsal = emp.OrderByDescending(x => x.Salary).GroupBy(x => x.DeptId).Select(x => x.FirstOrDefault());
var secS = hsal.SkipWhile(x => x.Salary < 19000);
foreach (Employees x in secS)
{
Console.WriteLine("Employer {0} of Dept {1} gets {2} as salary", x.EmpId, x.DeptId, x.Salary);
}
我得到的输出是,但它不应该产生任何结果,因为当它低于19000时必须跳过工资。
答案 0 :(得分:2)
SkipWhile
不会跳过具有给定条件的所有元素,但只有在满足此条件之前才会跳过所有元素。如果您想跳过所有使用Where
:
var secS = hsal.Where(x => x.Salary >= 19000);
输出(为什么&#34;它不应该产生任何结果&#34;,有一个工资= 20000?):
Employer 1 of Dept 1 gets 20000 as salary
答案 1 :(得分:1)
输出对我来说是正确的。
第一项的薪水为20000,不低于19000。
因此SkipWhile()
不会跳过任何内容,因为第一项的谓词是假的。
因此,整个列表将在foreach中返回。