委托、Linq学习

委托是一种类型,可以实例化。

常用泛型委托。

new Predicate<T>(函数名) ,,必须要有一个输入参数,只能有一个参数,并且需要返回bool类型。

new Action<T,T..>(函数名),可以有0-16个输入参数,不能有返回值。

new Func<T,T...>(函数名),可以有0-16个输入参数,最后加一个参数标示返回的值的类型,必须有返回值。  

匿名函数:

var s1 = new Predicate<string>(delegate(string item)
{
return string.IsNullOrEmpty(item);
});

匿名函数简写:

var s1 = new Predicate<string>(delegate(string item)
{
return string.IsNullOrEmpty(item);
});

var s2 = new Predicate<string>((string item) =>
{
return string.IsNullOrEmpty(item);
});

var sdf = new Action<string>((string item) => {

});
var sdfsdf = new Action<string>(a=>Console.WriteLine(a));

迭代器

static IEnumerable<int> GetIterator()
        {
            Console.WriteLine("迭代器返回了1");
            yield return 1;
            Console.WriteLine("迭代器返回了2");
            yield return 2;
            Console.WriteLine("迭代器返回了3");
            yield return 3;
        }
  foreach (var i in GetIterator())
            {
                if (i == 2)
                {
                    break;
                }
                Console.WriteLine(i);
            }
            Console.ReadKey();

  输出结果为:    

  

      迭代器返回了1
      1
      迭代器返回了2

      大家可以看到:

      当迭代器返回2之后,foreach就退出了

      并没有输出“迭代器返回了3”

      也就是说下面的工作没有做。

 (3)yield 关键字

      MSDN中的解释如下:

      在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。

      也就是说,我们可以在生成迭代器的时候,来确定什么时候终结迭代逻辑

      上面的代码可以改成如下形式:      

          static IEnumerable<int> GetIterator()
          {
              Console.WriteLine("迭代器返回了1");
              yield return 1;
              Console.WriteLine("迭代器返回了2");
              yield break;
              Console.WriteLine("迭代器返回了3");
              yield return 3;
          }

(4)注意事项

      <1>做foreach循环时多考虑线程安全性      

        在foreach时不要试图对被遍历的集合进行remove和add等操作

        任何集合,即使被标记为线程安全的,在foreach的时候,增加项和移除项的操作都会导致异常

        (我在这里犯过错)

      <2>IEnumerable接口是LINQ特性的核心接口

        只有实现了IEnumerable接口的集合

        才能执行相关的LINQ操作,比如select,where等

        这些操作,我们接下来会讲到。

也就是说,只有实现了IEnumerable接口,就可以使用这些扩展方法

Linq

查询操作符

过滤

Where

OfType arr.OfType<int>()

  Where

        用法:arr.Where(a => { return a > 3; })

        说明:找到集合中满足指定条件的元素

        OfType

        用法:arr.OfType<int>()

        说明:根据指定类型,筛选集合中的元素

学习地址:http://www.cnblogs.com/liulun/archive/2013/02/26/2909985.html

时间: 2024-11-05 13:45:16

委托、Linq学习的相关文章

Linq 学习(1) 概述

本篇简单回顾C#语言集合操作的变化,通过与Linq对等的面向对象的语法来认识Linq.Linq是Language Integrated Query, 初识Linq感觉跟SQL Server的Tsql很像,可以进行语言必备的逻辑操作,也可以实现对集合的直接查询.Net1.X时代C#不支持泛型,集合用元素只能为object类型的ArrayList等.添加.取出元素都与Object类型进行强制类型转换,如果是值类型要进行装箱操作,取出元素时进行拆箱操作,影响效率,编译时不进行类型检查,类型不匹配运行时

Linq 学习笔记

简介: LINQ 提供一种统一的方式,让我们能在C#语言中直接查询和操作各种数据.?? LINQ是用来描述数据访问总体方式的术语.LINQ to Object是针对实现了IEnumerable<T>的对象的LINQ:LINQ to SQL是针对关系数据库的LINQ:LINQ to XML是针对XML文档的LINQ.? ? LINQ除了提供一个统一的API来操作各种数据,并且为我们提供了编译时类型检查和动态创建查询表达式的能力.? LIINQ相关的C#语言功能 1.隐式类型局部变量 局部变量用v

Linq学习(二)-LinQ to Entity

在昨天我学习了LinQ的一些基础知识和动手写了一些LinQ to Object的例子的基础上,对于LinQ语法和基本的要点有了一定的了解.今天继续自己的学习,对于今天学习的LinQ to DataSet 和LinQ to Entity做自己的一些总结,一方面加深自己的理解,另一方面也能掌握LinQ技术的实现机制,对于也跟我一样对着一方面有兴趣的也可以让大家有个初步的感性认识,也是好的. 今天主要的篇幅会讲解LinQ to Entity的C#实现机制以及解决昨天我看完一小节之后的两点疑惑,后面会花

C#之Linq学习笔记【转】

写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些兴趣,所以打算整理点东西出来跟大家一起做个分享. 什么是Linq LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性.已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知.静态类型等强类型语言的好处.并

LINQ学习系列-----2.3 迭代器带来的延迟查询

此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行                      废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 from n in intArray select Square(n) 可以翻译为:Enumerable.Select<int,double>(intArray,n=>Square(n)); 看过上一篇文章的基本信息知道一些了,Enumerable.Select就是个迭代器,这也是延迟查询的奥秘.

Linq学习之旅——LINQ查询表达式

1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述 LINQ的全称是Language Integrated Query,中文译成“语言集成查询”.LINQ作为一种查询技术,首先要解决数据源的封装,大致使用了三大组件来实现这个封装,分别是LINQ to Object.LINQ to ADO.NET.LINQ to XML.它们和.NET语言的关系如下:

Linq学习(一)-初涉Linq

一.何谓LINQ LINQ:Language Integrated Query语言集成查询,其本质是对ADO.NET结果集通过反射连同泛型特性转换成对象集,实现OR模型的转换 二.优点与缺点 优点:封装了SQL语句,只对对象进行操作,代码量减少 缺点:追求效益的同时牺牲了性能,比起ADO.NET性能稍差,且对复制的sql语句也不好操作 三.支持那些查询 联合.分组.排序.连接查询 四.何谓Linq to sql Linq to sql是LINQ的一部分,全称基于关系型数据库的DotNet语言集成

Linq学习(三)-基本查询

一.本将主要介绍内容 从linq,sql,lambda三个角度比较来学习 select.orderby.分页.group by.distinct.子查询.in的用法 1.select 查询用户和它们的自我介绍 Linq to sql from a in Blog_UserInfo select new { 真实名字=a.RealName, 自我介绍=a.Introduce } sql SELECT [t0].[RealName] AS [真实名字], [t0].[Introduce] AS [自

LINQ学习笔记

基础概念 LINQ是微软推出的一项具有突破性的新特性--语言集成查询(Language Integrate Query),他在对象和数据间建立了一种对应关系,可以使用访问内存对象的方式查询数据集合 在.NET类库中,LINQ相关类库都在System.Linq命名空间下,对于目前程序需要用到的是LINQ to Object,数据源为实现了接口IEumerable<T>或IQueryable<T>的内存数据集合,对于本程序也就是List<T>集合 LINQ查询的目的是从制定