Action<T> 无返回值的系统泛型委托
namespace ConsoleApp1
{
public class UserInfo
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
private static List<UserInfo> getInit()
{
return new List<UserInfo>() {
new UserInfo(){ Id=, Name="001小王",Age= },
new UserInfo (){ Id=,Name="002大王",Age=},
new UserInfo (){ Id=,Name="003笨笨",Age=},
new UserInfo (){ Id=,Name="004通天塔",Age=},
};
}
static void Main(string[] args)
{
List<UserInfo> list = getInit();
list.ForEach(new Action<UserInfo>(delegate (UserInfo ui) { Console.WriteLine(ui.Name); }));
Console.WriteLine("----------------------------------------------------------------------------");
list.ForEach(delegate (UserInfo ui) { Console.WriteLine(ui.Id+"|"+ui.Name); });
Console.WriteLine("----------------------------------------------------------------------------");
list.ForEach(u=> {
Console.WriteLine(u.Id + "|" + u.Name);
});
Console.ReadLine();
}
}
}
Predicate<T> 返回bool值的系统泛型委托
namespace ConsoleApp1
{
public class UserInfo
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
static class Program
{
private static List<UserInfo> getInit()
{
return new List<UserInfo>() {
new UserInfo(){ Id=, Name="001小王",Age= },
new UserInfo (){ Id=,Name="002大王",Age=},
new UserInfo (){ Id=,Name="003笨笨",Age=},
new UserInfo (){ Id=,Name="004通天塔",Age=},
};
}
static void Main(string[] args)
{
#region
List<UserInfo> list = getInit();
list = list.FindAll(new Predicate<UserInfo>(delegate (UserInfo u) { return u.Id > ; }));
list.ForEach(u => {
Console.WriteLine(u.Id + "|" + u.Name);
});
Console.WriteLine("----------------------------------------------------------------------------");
list = list.FindAll(delegate (UserInfo u) { return u.Id > ; });
list.ForEach(u => {
Console.WriteLine(u.Id + "|" + u.Name);
});
Console.WriteLine("----------------------------------------------------------------------------");
list=list.FindAll(u => u.Id > );
list.ForEach(u=> {
Console.WriteLine(u.Id + "|" + u.Name);
});
#endregion Console.WriteLine("----------------------------自定义扩展方法---------------------------");
List<UserInfo> listnew = list.MyFindAll<UserInfo>(delegate (UserInfo u) { return u.Id > ; });
listnew.ForEach(u => {
Console.WriteLine(u.Id + "|" + u.Name);
});
Console.ReadLine();
} static List<T> MyFindAll<T>(this List<T> list, Predicate<T> predicate)
{
//新集合
List<T> newlist = new List<T>();
//遍历老集合
foreach (T item in list)
{
//如果item符合条件,则加入新集合
if (predicate(item))
{
newlist.Add(item);
}
}
return newlist;
}
}
}
Comparison<T> 返回int类型
namespace ConsoleApp1
{
public class UserInfo
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
static class Program
{
private static List<UserInfo> getInit()
{
return new List<UserInfo>() {
new UserInfo(){ Id=, Name="001小王",Age= },
new UserInfo (){ Id=,Name="002大王",Age=},
new UserInfo (){ Id=,Name="003笨笨",Age=},
new UserInfo (){ Id=,Name="004通天塔",Age=},
};
}
static void Main(string[] args)
{
List<UserInfo> list = getInit();
list.Sort(delegate (UserInfo u1, UserInfo u2) {
return u2.Age - u1.Age;
});
list.ForEach(u =>
{
Console.WriteLine(u.Id + "|" + u.Name);
});
Console.ReadLine();
}
}
}
Func<T,TReturn> 自定义返回类型的系统泛型委托
namespace ConsoleApp1
{
public class UserInfo
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class UserSimple
{
public string Name { get; set; }
}
static class Program
{
private static List<UserInfo> getInit()
{
return new List<UserInfo>() {
new UserInfo(){ Id=, Name="001小王",Age= },
new UserInfo (){ Id=,Name="002大王",Age=},
new UserInfo (){ Id=,Name="003笨笨",Age=},
new UserInfo (){ Id=,Name="004通天塔",Age=},
};
}
static void Main(string[] args)
{
List<UserInfo> list = getInit();
IEnumerable<UserSimple> uslist = list.Select(new Func<UserInfo, UserSimple>(delegate (UserInfo u) { return new UserSimple() { Name = u.Name }; }));
uslist.ToList().ForEach(us =>
{
Console.WriteLine( "|" + us.Name);
});
Console.WriteLine("----------------------------------------------------------------------------");
IEnumerable<UserSimple> newuslist = list.Select(delegate (UserInfo u) { return new UserSimple() { Name = u.Name }; });
uslist.ToList().ForEach(us =>
{
Console.WriteLine( "|" + us.Name);
});
Console.WriteLine("-------------------------------------自定义-------------------------------");
List<UserSimple> listnew = list.MySelect<UserInfo, UserSimple>(delegate(UserInfo u) { return new UserSimple() { Name = u.Name }; });
listnew.ForEach(us =>
{
Console.WriteLine( "|" + us.Name);
});
Console.ReadLine();
}
static List<TR> MySelect<T1, TR>(this List<T1> list, Func<T1, TR> func)
{
List<TR> listnew = new List<TR>();
foreach (T1 item in list)
{
TR tr = func(item);
listnew.Add(tr);
}
return listnew;
}
}
}
 

c#系统泛型委托的更多相关文章

  1. 匿名方法、Lambda表达和自定义泛型委托以及Func、Action系统泛型委托

    1.匿名方法的概念:一个方法没有具体的名称,而只有关键字delegate.方法参数.方法体.这种方法是匿名方法. 匿名方法的好处:将具体方法和委托直接关联在一起,如果我们基于委托只需要一个方法的时候, ...

  2. 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

    引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...

  3. 使用.NET中的Action及Func泛型委托

          委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调 ...

  4. 泛型委托及委托中所涉及到匿名方法、Lambda表达式

    泛型委托及委托中所涉及到匿名方法.Lambda表达式 引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到 ...

  5. 第十节:委托和事件(2)(泛型委托、Func和Action、事件及与委托的比较)

    一. 泛型委托 所谓的泛型委托,即自定义委托的参数可以用泛型约束,同时内置委托Func和Action本身就是泛型委托. 将上一个章节中的Calculator类中的方法用自定义泛型委托重新实现一下. p ...

  6. 泛型委托Func<T>

    Func<T>——委托只有泛型版本的,接受参数个数可以是若干个,也可以没有,但是必须是有返回值的方法. Func<TResult>——这个表示没有参数,只有返回值TResult ...

  7. 泛型委托Action与ActionT

    以前都是自己写委托,其实系统内部给我们系统了委托的. Action ——委托的非泛型版本就是一个无参数无返回值的委托. Action<T>——委托的泛型版本是一个无返回值,但是参数个数及类 ...

  8. c# 匿名方法(函数) 匿名委托 内置泛型委托 lamada

    匿名方法:通过匿名委托 .lamada表达式定义的函数具体操作并复制给委托类型: 匿名委托:委托的一种简单化声明方式通过delegate关键字声明: 内置泛型委托:系统已经内置的委托类型主要是不带返回 ...

  9. c#委托、泛型委托和匿名方法

    题外话:别指望看第一遍书就能记住和掌握什么——请看第二遍.第三遍. 本人女猿一枚,2年工作经验,喜欢钻研,喜欢创新,闲暇之余喜欢写写博客,深知自身能力薄弱,如表达错误.不当之处请园友们多多指出,互相交 ...

随机推荐

  1. ffmpeg学习笔记-多线程音视频解码

    之前的视频解码仍然存在问题,那就是是在主线程中去完成解码的,会造成线程阻塞,这里将其改为多线程解码,使其主线程不被阻塞 前面介绍了音视频的主线程解码,那样会阻塞主线程,在前面学习了多线程以后,就可以对 ...

  2. WEB渗透技术之浅析路径遍历

    1. 发送 http://www.nuanyue.com/getfile=image.jgp 当服务器处理传送过来的image.jpg文件名后,Web应用程序即会自动添加完整路径,形如“d://sit ...

  3. kali PIN码破解

    airmon-ng start wlan0   //开启网卡airodump-ng wlan0mon    //监听模式,查找开启wps的apreaver -i wlan0mon -b [ap’s m ...

  4. nginx passwd (http://www.voidcn.com/article/p-suebfyqy-nx.html)

    操作系统CentOS 7.2 nignx 1.10.1 首先我们用Nginx提供HTTP的Basic Auth功能,配置了需要输入的用户名和密码,才能访问网站. 我们使用htpasswd来生成密码信息 ...

  5. centos6.5安装python3及virtualenv环境

    1. 下载源码: wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz wget http://mirrors.sohu.com/ ...

  6. scrapy-redis数据去重与分布式框架

    数据去重 生成指纹:利用hashlib的sha1,对request的请求体.请求url.请求方法进行加密,返回一个40位长度的16进制的字符串,称为指纹 fp = hashlib.sha1() fp. ...

  7. 设置springmvc全局异常

    设置全局异常,将异常信息指定内容展示给前端页面,保证程序的安全性 @Slf4j@Componentpublic class ExceptionResolver implements HandlerEx ...

  8. mysql 组合两张表

    select P.FirstName,P.Lastname,A.City,A.State from Person P left join Address A on P.PersonId = A.Per ...

  9. fiddler笔记:web session窗口介绍

    1.web session列表的含义:(从左到右) # fiddler通过session生成的ID. Result 响应状态码. Host 接收请求的服务器的主机名和端口号. URL 请求资源的位置. ...

  10. 字典的setdefault()

    setdefault(key, default) 函数 ---有key获取值.没key设置 key:default dict.setdefault(key, default=None) 如果 key ...