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 ...
随机推荐
- VS2010中打开VS2013/VS2012项目
VS2010中打开VS2013/VS2012项目 (2014-04-03 23:47:53) 转载▼ 分类: IT VS低版本打开高版本创建的项目时会提示"选择的文件是解决方案文件,但是 ...
- http://www.cnblogs.com/flyoung2008/archive/2013/08/11/3251148.html
http://www.cnblogs.com/flyoung2008/archive/2013/08/11/3251148.html
- 存储入门 – RAID技术(大图解释)
对于RAID,一直都知道个概念,但是对于细节没有去仔细的研究过.正好昨天Training的时候, 老师讲解了RAID的内容,所以顺便就整理一下.很多内容都是参考了ISMv2这本书. RAID中用到的技 ...
- 自绘CListCtrl类,重载虚函数DrawItem
//自绘CListCtrl类,重载虚函数DrawItem void CNewListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TOD ...
- 271. Encode and Decode Strings
题目: Design an algorithm to encode a list of strings to a string. The encoded string is then sent ove ...
- USACO Section 2.2: Party Lamps
这题有个小技巧, 按一个键两次等于没按,所以如果depsum > 16的话其实不用做深搜到depsum次,而只要16次就可以了. /* ID: yingzho1 LANG: C++ TASK: ...
- python -- 一致性Hash
python有一个python模块--hash_ring,即python中的一致性hash,使用起来也挺简单. 可以参考下官方例子:https://pypi.python.org/pypi/hash_ ...
- VMware虚拟机中的常用文件介绍
虚拟机的文件管理由VMware Workstation来执行.一个虚拟机一般以一系列文件的形式储存在宿主机中,这些文件一般在由workstation为虚拟机所创建的那个目录中. 如下图所示:(< ...
- apiCloud创建APP项目
1.注册一个apiCloud账户 2.创建一个应用 3.安装sublime插件 4.用sublime创建应用 5.配置参数,保证一致 6.上传代码,两种方式 一种是压缩成zip 一种是配置svn,通过 ...
- 使用multimap创建重复键关联容器
在“使用 <map> 库创建关联容器”一文中,我们讨论了标准库中的 map 关联容器.但那只是 map 容器的一部分.标准库还定义了一个 multimap 容器,它与 map 类似,所不同 ...