using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 内置委托
{
static class Program
{
static void Main(string[] args)
{
}

static List<Person> GetPersonList()
{
return new List<Person>() {
new Person (){ Age =1,Name ="小白01"},
new Person (){Age =2,Name ="小白02"},
new Person (){Age =3,Name ="小白03"}
};
}
#region 1、 Action
/// <summary>
/// 系统泛型委托--无返回值(用来传递无返回值方法)
/// </summary>
static void TestAction()
{
List<Person> list = GetPersonList();
list.ForEach(new Action<Person>(delegate(Person p) { Console.Write(p.Name + "&&" + p.Age); }));
//简写方式
list.ForEach(delegate(Person p) { Console.WriteLine(p.Name + "&&" + p.Age); });
}
#endregion

#region 2、系统泛型委托-Predicate 返回bool值
/// <summary>
/// 系统泛型委托-Predicate 返回bool值
/// </summary>
static void TestPredicate()
{
List<Person> list = GetPersonList();
list= list.FindAll(new Predicate<Person>(delegate(Person p) { return p.Age > 1; }));

//简写 ,使用findAll方法可以帮我们根据条件筛选出一个新的集合
list = list.FindAll(delegate(Person p ) {
return p.Age > 1;
});

List<Person> listNew = list.MyFindAll<Person>(delegate(Person p) { return p.Age > 1; });
}

//自己写的FindAll方法
static List<T> MyFindAll<T>(this List<T> list, Predicate<T> predicate)
{
List<T> newlist = new List<T>();
foreach (T item in list)
{
if (predicate(item))
{
newlist.Add(item);
}
}
return newlist;
}
#endregion

#region 3、比较委托返回值int
/// <summary>
///系统委托 Comparison
/// </summary>
static void TestComparison()
{
List<Person> list = GetPersonList();
list.Sort(delegate(Person x, Person y)
{

return x.Age - y.Age;
});
list.ForEach(delegate(Person p)
{
Console.WriteLine(p.Name + "," + p.Age);
});
}
#endregion

/// <summary>
/// 带自定义返回值的委托
/// </summary>
static void TestFunc()
{
List<Person> list = GetPersonList();
list.Select(new Func<Person,SmallPerson>(delegate(Person p){
return new SmallPerson() {Name =p.Name };
})); //映射

//简写
IEnumerable<SmallPerson>enuNew=list.Select((delegate(Person p)
{
return new SmallPerson() { Name = p.Name };
}));

List<SmallPerson> listnew = list.MySelect<Person, SmallPerson>(delegate(Person p) {
return new SmallPerson() {Name =p.Name };
});
}

static List<TR> MySelect<T, TR>(this List<T> list, Func<T, TR> func)
{
List<TR> listNew = new List<TR>();
foreach (T item in list)
{
//调用func委托将老集合元素转成另一个元素返回
TR re = func(item);
//将转换后的新元素,存入新集合
listNew.Add(re);
}
return listNew;
}
}
class SmallPerson
{
public string Name { get; set; }
}
}

C#常用的内置委托的更多相关文章

  1. 委托+内置委托方法+多播委托+lambda表达式+事件

    委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...

  2. .NET (三)委托第三讲:内置委托Action

    .NET 为我们提供了无返回值的内置委托 Action,代码如下: // 摘要: // 封装一个方法,该方法只有一个参数并且不返回值. // // 参数: // obj: // 此委托封装的方法的参数 ...

  3. python常用数据类型内置方法介绍

    熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 下面介绍了python常用的集中数据类型及其方法,点开源代码,其中对主要方法都进行了中文注释. 一.整型 a = 100 a.xx ...

  4. Python基础学习笔记(七)常用元组内置函数

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...

  5. JS中一些常用的内置对象

    在JS中,经常会遇到明明知道一个对象有某个属性或方法,可是又不知道怎么写的情况.下面,我就罗列了一些JS中常用的内置对象的属性和方法. Math对象: Math对象的作用是执行常见的算术任务. 首先M ...

  6. python常用的内置函数哈哈

    python常用的内置函数集合做一个归类用的时候可以查找 abs 返回数字x的绝对值或者x的摸 all (iterable)对于可迭代的对象iterable中所有元素x都有bool(x)为true,就 ...

  7. python常用的内置函数

    python常用的内置函数集合做一个归类用的时候可以查找- abs 返回数字x的绝对值或者x的摸 - all (iterable)对于可迭代的对象iterable中所有元素x都有bool(x)为tru ...

  8. asp。net内置委托

    Action与Func是APS.NET内置委托 //--------------无返回值的委托Action--------------------------- Action是无返回值的泛型委托 Ac ...

  9. day15生成器send方法,递归,匿名函数,max结合匿名工作原理,常用的内置函数

    复习 ''' 1.带参装饰器 - 自定义 | wraps def wrap(info) def outer1(func): from functools import wraps @wraps(fun ...

随机推荐

  1. javascript的本地存储 cookies、localStorage

    一.cookies 本地存储 首先是常用的cookies方法,网上有很多相关的代码以及w3cSchool cookies. // 存储cookies function setCookie(name,v ...

  2. solr热身

    入博客园快满一年,居然没写一篇博客,好惭愧. 公司的搜索系统需要从Lucene.net(更新相当不给力)换成solr了,最近一直在学习solr,相关资料是相当的少啊,特别是还要在.net环境下开发.准 ...

  3. javascript操作json总结

    原文:http://www.cnblogs.com/worfdream/articles/1956449.html JSON(JavaScript Object Notation) 是一种轻量级的数据 ...

  4. TCP粘包/拆包问题的解决

    TCP粘包拆包问题 一个完整的包可能被TCP拆分成多个包,或多个小包封装成一个大的数据包发送. 解决策略 消息定长,如果不够,空位补空格 在包尾增加回车换行符进行分割,例如FTP协议 将消息分为消息头 ...

  5. (原+转)Ubuntu下安装understand及在启动器中增加快捷方式

    参考网址: http://www.xuebuyuan.com/1353431.html http://www.2cto.com/os/201309/242543.html http://my.osch ...

  6. Android 播放gif图片

    Android的原生控件并不支持播放GIF格式的图片.我们都知道,在Android中如果想要显示一张图片,可以借助ImageView控件来完成,但是如果将一张GIF图片设置到ImageView里,它只 ...

  7. YY语音从4.0版本开始是基于Qt的开发过程,以及碰到的问题

    作者:姚冬链接:http://www.zhihu.com/question/21359230/answer/20127715来源:知乎著作权归作者所有,转载请联系作者获得授权. YY语音从4.0版本开 ...

  8. SqlBulkCopy 类

    1.SqlBulkCopy 简介  Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同 ...

  9. Regex类

    一.属性 CacheSize 获取或设置已编译的正则表达式的当前静态缓存中的最大项数. 默认是15个,最近使用的15个会存在缓存中,避免重新创建.当有第16个进来会替换掉第  1个.保持15个.Opt ...

  10. B-树、B+树、B*树的区别

      原文地址:  http://blog.csdn.net/dazhong159/article/details/7963846/ B-树.B+树.B*树的区别 2012-09-11 22:41 97 ...