.NET中的Func委托用法
MSDN对于Func<T, TResult>)的官方解释:
封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。
下面通过几个例子对比下,就容易知道其用法:
以下例子演示了如何利用委托将字符串转化为大写:
delegate string ConvertMethod(string inString);
private static string UppercaseString(string inputString)
{
return inputString.ToUpper();
}
protected void Page_Load(object sender, EventArgs e)
{
//ConvertMethod convertMeth = UppercaseString; 也可以这样写
ConvertMethod convertMeth = new ConvertMethod(ppercaseString);
string name = "Dakota";
Response.Write(convertMeth(name));//通过委托调用UppercaseString方法
}
这段代码很容易理解,定义一个方法UppercaseString,功能很简单:将字符串转化为大写,然后定义一个ConvertMethod的实例来调用这个方法,最后将Dakota转化为大写输出
接下来改进一下,将Page_Load中的 ConvertMethod convertMeth = new ConvertMethod(ppercaseString)改为Func 泛型委托,即:
protected void Page_Load(object sender, EventArgs e)
{
Func<string, string> convertMeth = UppercaseString;
string name = "Dakota";
Response.Write(convertMeth(name));
}
运行后,与前一种写法结果完全相同,这里再联系官方解释想一想,Func<string, string>即为封闭一个string类型的参数,并返回string类型值的方法
当然,我们还可以利用匿名委托,将这段代码写得更简洁:
protected void Page_Load(object sender, EventArgs e)
{
Func<string, string> convertMeth = delegate(string s) { return s.ToUpper(); };
string name = "Dakota";
Response.Write(convertMeth(name));
}
怎么样?是不是清爽很多了,但这并不是最简洁的写法,如果利用Lambda表达式,还可以再简化:
protected void Page_Load(object sender, EventArgs e)
{
Func<string, string> convertMeth = s => s.ToUpper();
string name = "Dakota";
Response.Write(convertMeth(name));
}
现在应该体会到什么叫“代码的优雅和简洁”了吧? 记起了曾经学delphi时,一位牛人的预言:以后可能会出现一种新学科:程序美学! 对此,我深信不疑:优秀的代码就是一种美!
在linq to sql中其实大量使用了Func<T, TResult>这一泛型委托,下面的例子是不是会觉得很熟悉:
protected void Page_Load(object sender, EventArgs e)
{
Func<string, string> convertMeth = str => str.ToUpper();
string[] words = { "orange", "apple", "Article", "elephant" };
IEnumerable<String> aWords = words.Select(convertMeth);
foreach (String s in aWords)
{
Response.Write(s + "<br/>");
}
}
原文链接:http://www.cnblogs.com/lin614/archive/2008/08/07/1262491.html
.NET中的Func委托用法的更多相关文章
- C#中常见的委托(Func委托、Action委托、Predicate委托)
今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predicate全面解析 首先来说明Func委托,通 ...
- Aap.Net中的Action和Func委托
前言 最近在阅读某开源框架源码的时候,发现作者在其中运用了很多Action委托和Func委托,虽然我之前在项目中也有一些对委托的实操,但还是免不了长时间的不用,当初消化的一些委托基础都遗忘了...索性 ...
- C#扫盲篇(三):Action和Func委托--实话实说
一.基础定义 老王想找老张的老婆出去耍,但是一看,老张还在厨房煮饭.于是老王就对老张隔壁的淑芬说:"等下老张吃完饭出去喝茶,你就把前门晒的苞谷收了,老张从左门出,你就收右边的苞谷,我就知道从 ...
- Func委托与表达式树Expression
最近在写ORM框架,其中遇到一个难点,就是作为框架调用方如何将查询条件传入框架内.其中就用到了Expression. Func委托 要Expression先要了解Func委托,Func委托的样式是: ...
- C#中ref关键字的用法总结
ref表示引用的意思,C#中它有多种用法,这里简单总结一下: 1.按引用传递参数 具体可见:C#中的值传递与引用传递(in.out.ref) 2.引用局部变量 引用局部变量指的是在变量声明时使用ref ...
- Action<>和Func<> 委托【代理】
C#中的Action<>和Func<> 其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的 ...
- 通过Func 委托理解委托和匿名方法及Lambda 表达式
Func<T, TResult> 委托 封装一个具有一个参数并返回 TResult 参数指定的类型值的方法. 命名空间: System 程序集: mscorlib(在 mscorlib.d ...
- C#之Action和Func的用法
以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发 ...
- C#内置泛型委托:Func委托
1.什么是Func委托 Func委托代表有返回类型的委托 2.Func委托定义 查看Func的定义: using System.Runtime.CompilerServices; namespace ...
随机推荐
- socket编程一些注意的东西
帮一个同学做了一下面试的作业.主要是socket编程要写一个多人博彩游戏室.没注意,被一些地方坑了一下,而且其实如果没有这个概念,还不好发现. 1.readLine() http://blog.csd ...
- Python selenium的js扩展实现
python写的数据采集,对一般有规律的页面用 urllib2 + BeautifulSoup + 正则就可以搞定. 但是有些页面的内容是通过js生成,或者通过js跳转的,甚至js中还加入几道混淆机制 ...
- leetcode350
public class Solution { public int[] Intersect(int[] nums1, int[] nums2) { var len1 = nums1.Length; ...
- leetcode485
public class Solution { public int FindMaxConsecutiveOnes(int[] nums) { ; ; ; i < nums.Length; i+ ...
- bootstrap做的导航
顶部导航:nav-tabs 左边导航:nav-list 响应式布局:div嵌套 ~ container.row.ol-lg-X 效果: 源码: <!DOCTYPE html> <ht ...
- JAVA的String类的常用方法(转载)
Java-String类的常用方法总结 一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的f ...
- 【Java】JVM(二)、Java垃圾收集算法
一.标记-清除算法 算法主要分为两个步骤 1. 标记: 遍历所有的 GC Roots, 然后标记所有可达对象为存活对象 2. 清除: 遍历堆中所有对象,然后将没有标记的对象清除. 存在不足: 1. 效 ...
- JFR 与 JProfilter Jvmisualvm
只有JFR 是可以在生产环境使用 采用C++独立写的采样手机功能 而 JProfilter/JVisualvm 都只能在测试环境下使用 使用instrument 机制 ,还有debug 框架 最早是 ...
- ASP.NET中的URL编码解码(转)
在对URL进行编码时,该用哪一个?这两都使用上有什么区别吗?测试: string file="文件上(传)篇.doc";string Server_UrlEncode=Server ...
- 第七章 二叉搜索树(c)平衡与等价