c#系统泛型委托
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();
}
}
}
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;
}
}
}
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();
}
}
}
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#系统泛型委托的更多相关文章
- 匿名方法、Lambda表达和自定义泛型委托以及Func、Action系统泛型委托
1.匿名方法的概念:一个方法没有具体的名称,而只有关键字delegate.方法参数.方法体.这种方法是匿名方法. 匿名方法的好处:将具体方法和委托直接关联在一起,如果我们基于委托只需要一个方法的时候, ...
- 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式
引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...
- 使用.NET中的Action及Func泛型委托
委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调 ...
- 泛型委托及委托中所涉及到匿名方法、Lambda表达式
泛型委托及委托中所涉及到匿名方法.Lambda表达式 引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到 ...
- 第十节:委托和事件(2)(泛型委托、Func和Action、事件及与委托的比较)
一. 泛型委托 所谓的泛型委托,即自定义委托的参数可以用泛型约束,同时内置委托Func和Action本身就是泛型委托. 将上一个章节中的Calculator类中的方法用自定义泛型委托重新实现一下. p ...
- 泛型委托Func<T>
Func<T>——委托只有泛型版本的,接受参数个数可以是若干个,也可以没有,但是必须是有返回值的方法. Func<TResult>——这个表示没有参数,只有返回值TResult ...
- 泛型委托Action与ActionT
以前都是自己写委托,其实系统内部给我们系统了委托的. Action ——委托的非泛型版本就是一个无参数无返回值的委托. Action<T>——委托的泛型版本是一个无返回值,但是参数个数及类 ...
- c# 匿名方法(函数) 匿名委托 内置泛型委托 lamada
匿名方法:通过匿名委托 .lamada表达式定义的函数具体操作并复制给委托类型: 匿名委托:委托的一种简单化声明方式通过delegate关键字声明: 内置泛型委托:系统已经内置的委托类型主要是不带返回 ...
- c#委托、泛型委托和匿名方法
题外话:别指望看第一遍书就能记住和掌握什么——请看第二遍.第三遍. 本人女猿一枚,2年工作经验,喜欢钻研,喜欢创新,闲暇之余喜欢写写博客,深知自身能力薄弱,如表达错误.不当之处请园友们多多指出,互相交 ...
随机推荐
- 教程3 -如何与dotmemory内存优化交通
在本教程中,我们将看到如何使用dotmemory优化你的应用程序的内存使用情况. 我们所说的什么“优化内存使用”?像在任何操作系统的过程中,垃圾收集(GC)消耗系统资源.逻辑很简单:更多的藏品GC已作 ...
- eNSP——配置通过FTP进行文件操作
原理: FTP (File Transfer Protocol,文件传输协议)是在TCP/IP网络和Internet.上最早使用的协议之-,在TCP/IP协议族中属于应用层协议,是文件传输的Inter ...
- 《The C Programming Language》学习笔记
第五章:指针和数组 单目运算符的优先级均为2,且结合方向为自右向左. *ip++; // 将指针ip的值加1,然后获取指针ip所指向的数据的值 (*ip)++; // 将指针ip所指向的数据的值加1 ...
- 《C专家编程》读书笔记之第8~11章
八.为什么程序员无法分清万圣节和圣诞节 1. 整形提升是指char,short int和位段类型(无论signed或unsigned)以及枚举类型将被提升为int或unsigned int(如果int ...
- Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"
今天使用ajax上传文件时,出现了错误.数据传输的方式是通过定义formData完成的,提交的文件对象也设置为dom对象,但是还是不能发送请求.F12看到后台报了个错误:Uncaught TypeEr ...
- html当中如何引用js文件
3)html当中如何引用js文件 如果需要javascript工程师和html美工各干各的工作,需要分开写文件. 例 1.2 <html><head> <scrip ...
- 【AtCoder】ARC065
ARC065 C - 白昼夢 / Daydream 直接递推就好 #include <bits/stdc++.h> #define fi first #define se second # ...
- LC 94. Binary Tree Inorder Traversal
问题描述 Given a binary tree, return the inorder traversal of its nodes' values. (左 - 根 - 右) Example: In ...
- 前端vue组件传参
## 路由传参 """ 转跳: <router-link :to="'/course/'+course.id">{{course.name ...
- Prometheus Operator 自动发现和持久化
Prometheus Operator 自动发现和持久化 之前在 Prometheus Operator 下面自定义一个监控选项,以及自定义报警规则的使用.那么我们还能够直接使用前面课程中的自动发现功 ...