码迷,mamicode.com
首页 > 其他好文 > 详细

委托、Linq学习

时间:2015-08-16 16:21:22      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

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

常用泛型委托。

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

委托、Linq学习

标签:

原文地址:http://www.cnblogs.com/willperfect/p/4734341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!