(1)使用 针对集合类型编写foreach代码块,都是在使用迭代器 集合类型实现了IEnumerable接口 都有一个GetEnumerator方法 (2)迭代器优点 假如要遍历一个庞大的集合,只要其中一个元素满足条件,据完成了任务。 (3)yield关键字 MSDN中: 在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。 (4)注意事项: 1.在foreach循环式多考虑线程安全性,在foreach时不要试图对便利的集合进行remove和add操作,任何集合,即使被标记为线程安全,在foreach时,增加项和移除项都会导致异常。 2.IEnumerable接口是LINQ特性的核心接口 只有实现了IEnumerable接口的集合,才能执行相关的LINQ操作,比如select,where等
LINQ 1.查询操作符 (1)源起 .net的设计者在类库中定义了一系列拓展的方法,方便用户操作集合对象。 (2)使用 一些系列拓展方法,eg:Where,Max,Select,Sum,Any,Average,All,Concat等都是针对IEnumerable的对象进行拓展,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _1.LINQLearn
{
class Program
{
static void Main(string[] args)
{
List<int> ltemp = new List<int> { 1, 23, 4, 5, 6 };
var res = ltemp
.Where(a => { return a > 4; })
.Sum();
Console.WriteLine(res);
Console.ReadKey();
}
}
}
<1>上面的代码中用了两个拓展方法。 Where拓展方法,需要传入一个Func<int,bool>类型的泛型委托,此泛型委托,需要一个int的输入参数和一个bool类型的返回值。 <2>Sum拓展方法计算了Where拓展方法返回的集合的和 (3)好处 上面的代码中 ltemp .Where(a => { return a > 4; }) .Sum(); 上面的一句可以完全写成 (from v in arr where v > 3 select v).Sum(); (4)标准查询操作符说明 <1>过滤 Where 用法:arr.Where(a=>{ return a>3; }) 说明:找到集合中满足指定条件的元素 OfType 用法:arr.OfType<int>() 说明:根据类型,筛选集合中的元素 <2>投影 Select 用法:arr.Select<int,string>(a=>a.ToString()); 说明:将集合中的每个元素投影到进的集合中。上例子中新集合是一个IEnumerable<String>的集合 SelectMany 用法arr.SelectMany<int,string>(a=>{return new List<string>(){a.Tostring();}};
查询表达式 (1)源起 查询早做副表示扩张方法来操作及和,虽然已经比较方便,但可读性和代码的语义来考虑,仍有不足,于是产生了查询表达式的写法。虽然很像SQL,但是用本质不同 (2)用法 from v in arr where v>3 select v (3)说明: ... ... 参考文档: https://blog.csdn.net/snakorse/article/details/44171295