C#迭代器与LINQ查询操作符

(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值