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. vs中动态DLL与静态LIB工程中加入版本信息的方法

    说明:本文仅针对刚接触VS不久的新手们(包括ME),提供的一点小Tips,同时也是小生的首篇Blog文章,请大伙多多担待O(∩_∩)O哈! 步骤1 - 在工程中右键添加新建项 步骤2 - 选择创建RC ...

  2. iOS_block内存分析

    ----------------------MRC情况下Block内存分析---------------------------- 1.如果在block中使用全局变量,他为了持有这个变量,会将对应的对 ...

  3. Xcode no visible @interface for xxx declares the selector errors

  4. poi HSSFRichTextString 对cell中的每一段文字设置字体

    HSSFRichTextString ts= new HSSFRichTextString(" 经审核,我司已同意其出库申请.请你部按规定将托管银行承兑汇票办理出库." + &qu ...

  5. 巧用Graphviz和pvtrace等工具可视化C函数调用

    http://guiquanz.github.io/2012/10/15/linux_c_call_trace/

  6. EF调用存储过程实例

    创建实体: public class User { public string UserID { get; set; } public string UserName { get; set; } pu ...

  7. Linux系统目录/bin /sbin /usr/bin /usr/sbin和/lib /usrlib的一些分析

    其实就是相当于转载了. /bin,/sbin,/usr/sbin,/usr/bin 目录 这些目录都是存放命令的,首先区别下/sbin和/bin: 从命令功能来看,/sbin 下的命令属于基本的系统命 ...

  8. Kth Largest Element in an Array 解答

    Question Find the kth largest element in an unsorted array. Note that it is the kth largest element ...

  9. knowledges address

    http://www.zhukun.net/archives/5794

  10. php使用PDO方法详解

    PDO::exec:返回的是int类型,表示影响结果的条数. 复制代码 代码如下: PDOStatement::execute 返回的是boolean型,true表示执行成功,false表示执行失败, ...