代码:
List<int> list = new List<int>() { 100, 200, 300, 400 };
int downLimit = 200;
var list1 = list.Where(item =>
{
if (item > downLimit)
{
Console.WriteLine(item);
return true;
}
else
{
return false;
}
});
Console.WriteLine("1234");
Console.WriteLine(list1.Count());
downLimit = 300;
Console.WriteLine("4567");
Console.WriteLine(list1.Count());
var items = list1.ToList();
输出:
1234
300
400
2
4567
400
1
400
从上面的代码可以看出,1234居然在300以及400之前输出,这是因为Lamda表达式除非被调用,否则不会执行,也就是where这个谓语并不会触发Lamda表达式,只有在调用集合的count方法时或者foreach方法或者toarray等方法时才会被调用,从上面的代码可以看出,每次调用count方法,lamda表达式都会被调用一次,所以如果我们想要使用谓词where时就调用Lamda表达式的话,则可以这样调用,如下:
List<int> list = new List<int>() { 100, 200, 300, 400 };
int downLimit = 200;
var list1 = list.Where(item =>
{
if (item > downLimit)
{
Console.WriteLine(item);
return true;
}
else
{
return false;
}
}).ToList ();
Console.WriteLine("1234");
输出:
300
400
1234
这是因为where后面直接调用了tolist方法,所以触发了Lamda表达式的执行。