Where语句检查符合条件的元素,并返回新的迭代器
1:基于谓词筛选值序列
IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
1.1:foreach解析:
//IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
//foreach解析:
//source:TSource->string
List<string> fruits15 = new List<string> { "apple", "passionfruit", "banana", "mango",
"orange", "blueberry", "grape", "strawberry" };
//predicate:TSource->item
Console.WriteLine("基于谓词筛选值序列foreach解析:");
foreach (string item in fruits15)
{
if (item.StartsWith("a"))//predicate:bool->item.StartsWith("a")
{
Console.Write(item + ",");
}
}
1.2:原理图:执行方式:延迟流式执行
1.3:linq写法(查询语句):
//2:linq写法(查询语句):
var fruits16 = from f in fruits15.AsEnumerable()
where f.StartsWith("a")
select f;
Console.WriteLine("基于谓词筛选值序列linq写法:");
foreach (string item in fruits16)
{
Console.WriteLine(item);
}
1.4:查询方法写法:
//3:查询方法写法:
var fruits17 = fruits15.AsEnumerable().Where(f=> f.StartsWith("a"));
Console.WriteLine("基于谓词筛选值序列查询方法写法:");
foreach (string item in fruits17)
{
Console.WriteLine(item);
}
2:基于谓词筛选值序列。 将在谓词函数的逻辑中使用每个元素的索引。
IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate)
2.1:foreach解析:
//IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate)
//foreach解析:
//source:TSource->string
List<string> fruits25 = new List<string> { "apple", "passionfruit", "banana", "mango",
"orange", "blueberry", "grape", "strawberry" };
int index = 0;
//predicate:TSource->item
//predicate:int->inde