Func<T, TResult> 委托的由来和调用和好处(为了高大上,为了白富美)
Func<T, TResult>是系统的内置委托的中最常用的一个。特点就是必须有一个返回值。(func委托有多个重载,所有重载的最后一个参数就是返回值的类型,前面的是参数类型)。注:没有返回值的系统内置委托是Action<T>
Func委托的作用就是当我们需要传入n参数并有返回值时,我们不用再去定义一个委托,直接调用func即可。
例如: 当我们输入一个字符串,然后把这个字符串转换为大写并返回。
我们最原始的做法是:先写一个方法
public string toUpperStr(string SourceStr)
{
return SourceStr.ToUpper();
}
然后调用
public ActionResult Index()
{
string sourceStr = "SuGuoTong";
ViewBag.Result = ToUpperStr(sourceStr);
return View();
}
但如果还需要把字符串改成小写,还得在增加一个方法,为了方便,所以我们引进委托。
更重要的是上面的代码一看就是屌丝代码,为了高大上,为了白富美,我们在行动。
delegate string ConvertMethod(string str);//传入一个参数和返回一个返回值的委托
public ActionResult Index()
{
string sourceStr = "SuGuoTong";
ConvertMethod convert = ToUpperStr;
ViewBag.Result = convert(sourceStr);
return View();
}
public string ToUpperStr(string SourceStr)
{
return SourceStr.ToUpper();
}
把上面我们自己声明的委托改为系统内置的委托Func<T, TResult>
public ActionResult Index()
{
string sourceStr = "SuGuoTong";
Func<string, string> convert = ToUpperStr; //Func<string,string>第一个string是参数类型,第二个string是返回值类型
ViewBag.Result = convert(sourceStr);
return View();
}
public string ToUpperStr(string SourceStr)
{
return SourceStr.ToUpper();
}
//变白了,想不想变富
为了变富,我们把下面的方法也去掉,这时候就要用到匿名方法
public ActionResult Index()
{
string sourceStr = "SuGuoTong";
Func<string, string> convert = delegate(string s) { return s.ToUpper(); };
ViewBag.Result = convert(sourceStr);
return View();
}
//是不是又白又富了,想不想变美
为了变美,我们引进lambda(亚麻带)表达式
public ActionResult Index()
{
string sourceStr = "SuGuoTong";
Func<string, string> convert = o=>o.ToUpper();
ViewBag.Result = convert(sourceStr);
return View();
}
//成了白富美,就可以进军岛国了
完!
调用系统方法需传入func的例子:
string[] strAry = { "gs","gsd","htrh"};
var resl = strAry.Select<string, string>(o => o.ToUpper());
附:匿名方法
关于调用系统的方法,我们需要传匿名方法的例子很多:
比如Array.ConvertAll方法把一个string[]转换成int[]
这就是需要我们传一个匿名方法(传入一个string类型参数,返回一个int类型的匿名方法)
intArr = Array.ConvertAll<string, int>(str, delegate(string s) { return int.Parse(s) * ; });
或直接用lambda代替
intArr = Array.ConvertAll<string, int>(str, o => int.Parse(o) * 5);
Func<T, TResult> 委托的由来和调用和好处(为了高大上,为了白富美)的更多相关文章
- 参考例子,学习Func<T, TResult>委托
这些天,开发ASP.NET MVC,其间有查找资料,发现一个全新的Func<T, TResult> 委托.让我们在开发时,节省与简化很多. 在开发过程中,我们需要把一个泛型List< ...
- Func<T, TResult> 委托
Func<T, TResult> 委托 Visual Studio 2008 命名空间: System程序集: System.Core(在 System.Core.dll 中) 语 ...
- func 和action 委托的使用
func 可以带返回值,action 不带返回值 平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委 ...
- Expression<Func<T,TResult>>和Func<T,TResult>
1.Expression<Func<T,TResult>>是表达式 //使用LambdaExpression构建表达式树 Expression<Func<int, ...
- Func<T,TResult>泛型委托
描述: 封装一个具有一个参数并返回TResult参数指定的类型值的方法. 语法: public delegate TResult Func<T,TResult>(T arg); 参数类型: ...
- C# 笔记 Func<TResult> 委托、Action<T> 委托
https://blog.csdn.net/wanglui1990/article/details/79303894 Func<ΤResult> 委托:代理(delegate)一个返回类型 ...
- 使用Func<T1, T2, TResult> 委托返回匿名对象
Func<T1, T2, TResult> 委托 封装一个具有两个参数并返回 TResult 参数指定的类型值的方法. 语法 public delegate TResult Func< ...
- Func<T,TResult>的使用方法(转载)
public delegate TResult Func <T, TResult>(T arg) 这是一个委托方法,这个方法有一个参数T(T arg),比如int arg,string a ...
- Func 和 Action 委托
有了泛型委托,就有了一能适用于任何返回类型和任意参数(类型和合理的个数)的通用委托,Func 和 Action.如下所示(下面的in表示参数,out表示返回结果): delegate TResult ...
随机推荐
- easyUI Admin 模板
http://www.oschina.net/p/Easy-Admin?fromerr=23Tfbale
- 【转】VC++与MySQL数据库的连接
原文地址:http://blog.csdn.net/nupt123456789/article/details/8043091 1.MySQL数据库的安装 你可以从MySQL的官网上或者从如下地址下载 ...
- Spark源码编译
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3822995.html spark源码编译步骤如下: cd /home/hdpusr/workspace ...
- Project Euler P105:Special subset sums: testing 特殊的子集和 检验
Special subset sums: testing Let S(A) represent the sum of elements in set A of size n. We shall cal ...
- python_pycharm介绍1
1. 常用设置 修改编程风格 File-Setting中,Editor下Colors&Fonts修改即可调整风格. 修改字体大小 pycharm默认字体太小,需调整些,Settings--&g ...
- 8 simple things that will make you sexy
8 simple things that will make you sexy8种方法教你不动声色的性感What makes a women sexy? Is it her body? Is it t ...
- Android核心分析之二十六Android GDI之SurfaceFlinger
Android GDI之SurfaceFlinger SurfaceFinger按英文翻译过来就是Surface投递者.SufaceFlinger的构成并不是太复杂,复杂的是他的客户端建构.Sufac ...
- 实记JLink刷固件方法
最近J-Link调试程序,不知何故,USB报无法连接,试了别的电脑也是这样.文件存于“百度网盘/05.组装维修/4.单片机/1.JLink-ARM仿真器”下.所有的操作基于WIN7 32位系统. 1. ...
- windows xp 无法连接wpa无线网络
其实以前一直是可以的,不知为什么前几天忽然就不能加入原有的无线网了.我的无线网是WPA加密的,采用DHCP分配IP(但针对特定MAC地址分配静态IP). 在网上找了许久,有的网友认为应该把无线网卡(那 ...
- 275. H-Index II
题目: Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optim ...