- 浏览: 83360 次
文章分类
- 全部博客 (136)
- 我的技术资料收集 (98)
- 具体技术 (1)
- 的技术资料收集 (4)
- All Articles (1)
- 机器学习 Machine Learning (1)
- 网络编程 (1)
- java (2)
- ava (1)
- 零散技术 (1)
- C# (3)
- 技术资料收集 (1)
- CQRS (1)
- 数据库技术(MS SQL) (1)
- .Net微观世界 (1)
- Oracle SQL学习之路 (1)
- C/C++ (1)
- JS/JQ (1)
- Js封装的插件/实例/方法 (2)
- 敏捷个人 (2)
- Javascript (1)
- 程序设计---设计模式 (1)
- Bug (1)
- 未知分类 (1)
- 程序设计 (1)
- Sharepoint (1)
- Computer Graphic (1)
- IT产品 (1)
- [06]JS/jQuery (1)
- [07]Web开发 (1)
- .NET Solution (1)
- Android (3)
- 机器学习 (1)
- 系统框架设计 (1)
- Others (1)
- 算法 (1)
- 基于Oracle Logminer数据同步 (1)
- 网页设计 (1)
- 原创翻译 (1)
- EXTJS (1)
- Jqgrid (1)
- 云计算 (1)
最新评论
Func<T1, T2, TResult> 委托
封装一个具有两个参数并返回 TResult 参数指定的类型值的方法。
语法
T1 arg1,
T2 arg2
)
in T1
此委托封装的方法的第一个参数类型。
该类型参数是逆变。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息,请参见泛型中的协变和逆变。
in T2
此委托封装的方法的第二个参数类型。
out TResult
此委托封装的方法的返回值类型。
该类型参数是协变。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息,请参见泛型中的协变和逆变。
参数
arg1类型:T1
此委托封装的方法的第一个参数。
arg2类型:T2
此委托封装的方法的第二个参数。
返回值
类型:TResult
此委托封装的方法的返回值。
备注
可以使用此委托表示一种能以参数形式传递的方法,而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有两个均通过值传递给它的参数,并且必须返回值。
在使用 Func<T1, T2, TResult> 委托时,不必显式定义一个封装具有两个参数的方法的委托。例如,以下代码显式声明了一个名为 ExtractMethod 的委托,并将对 ExtractWords 方法的引用分配给其委托实例。
示例
下面的示例演示如何声明和使用 Func<T1, T2, TResult> 委托。此示例声明一个 Func<T1, T2, TResult> 变量,并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值,则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。
using System.Collections.Generic;
using System.Linq;
public class Func3Example
{
public static void Main()
{
Func<String, int, bool> predicate = (str, index) => str.Length == index;
String[] words = { "orange", "apple", "Article", "elephant", "star", "and" };
IEnumerable<String> aWords = words.Where(predicate).Select(str => str);
foreach (String word in aWords)
Console.WriteLine(word);
}
}
了解完这些以后,我们来看看它的应用。
不知道童鞋们有没有遇到这样的问题,在读取数据访问层中数据集合时,发现该方法需要返回的结果中包括对象及其外键对象时,又不想添加一个实体类来封装它,那么有什么别的好办法吗?也许您会选择用动态对象(dynamic关键字),不错,这个这确实可以解决这个问题,但是有一个弊端,且不论动态对象在运行时编译,在编写程序时,它存在一个很不方便的体验,它不能点(.)出它的属性,不免产生意外的拼写错误或是寻找-复制-黏贴的麻烦。
那么怎么办呢?我们可以利用Func<T1, T2, TResult> 委托来帮助我们实现。
{
var results = from u in User
join p in Person on u.Id equals p.uId
select new { User = u, Person = p };
IList<TResult> resultItems = new List<TResult>();
foreach (var item in results.ToList())
{
resultItems.Add(itemFactory(item.User, item.Person));
}
return resultItems;
}
{
return new { u.Id, u.LoginName, pId = p.Id, p.Name };
});
此外,当然也可以自定义更多的委托,这里笔者就不详细介绍了,读者可自行尝试。
哈哈,这样是否有帮到您呢?本人文笔粗糙简陋,请多多大虾们指教!
本文链接:http://www.cnblogs.com/f-ye/p/func.html,转载请注明。
发表评论
-
C#WebBrowser控件使用教程与技巧收集--苏飞收集 - sufeinet
2013-06-28 12:07 1063原帖地址:http://www.cnblogs.com/suf ... -
我要喷一个自认为很垃圾的网站架构 - 老赵【苏州】
2013-06-28 12:01 1122原帖地址:http://www.cnblogs.com/lao ... -
[翻译] Oracle Database 12c 新特性Multitenant - Cheney Shue
2013-06-28 11:43 618原帖地址:http://www.cnblogs.com/ese ... -
memcahd 命令操作详解 - 阿正-WEB
2013-06-28 11:37 468原帖地址:http://www.cnblogs.com/azh ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 588原帖地址:http://www.cnblogs.com/ste ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 554原帖地址:http://www.cnblogs.com/ste ... -
RPG游戏之组队测试 - zthua
2013-06-27 10:22 554原帖地址:http://www.cnblogs.com/zth ... -
IT人们给个建议 - SOUTHER
2013-06-26 14:06 521原帖地址:http://www.cnblogs.com/sou ... -
Java向前引用容易出错的地方 - 银河使者
2013-06-26 14:00 491原帖地址:http://www.cnblogs.com/nok ... -
【web前端面试题整理03】来看一点CSS相关的吧 - 叶小钗
2013-06-25 10:45 781原帖地址:http://www.cnblogs.com/yex ... -
Windows 8 动手实验系列教程 实验6:设置和首选项 - zigzagPath
2013-06-25 10:27 615原帖地址:http://www.cnblogs.com/zig ... -
闲聊可穿戴设备 - shawn.xie
2013-06-25 10:21 560原帖地址:http://www.cnblo ... -
CentOS下Mysql安装教程 - 小学徒V
2013-06-23 15:24 605原帖地址:http://www.cnblogs.com/xia ... -
vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) - skyme
2013-06-23 15:18 833原帖地址:http://www.cnblogs.com/sky ... -
之前专门为IE6、7开发的网站如何迁移到IE10及可能遇到的问题和相应解决方案汇总 - 海之澜
2013-06-23 15:12 944原帖地址:http://www.cnblogs.com/wuz ... -
Android学习笔记--解析XML之SAX - 承香墨影
2013-06-23 15:01 406原帖地址:http://www.cnblo ... -
SQL Server 性能优化之——T-SQL TVF和标量函数
2013-06-19 09:32 666原帖地址:http://www.cnblogs.com/Boy ... -
Nginx学习笔记(二) Nginx--connection&request
2013-06-19 09:26 658原帖地址:http://www.cnblogs.com/cod ... -
从郭美美霸气侧漏看项目管理之项目经理防身术
2013-06-19 09:20 496原帖地址:http://www.cnblogs.com/had ... -
1、图解Oracle Logminer配置使用
2013-06-18 10:37 1605原帖地址:http://www.cnblogs.com/shi ...
相关推荐
3. `Func<T1, T2, TResult>` 包含两个输入参数 `T1` 和 `T2`,返回类型为 `TResult`。 4. `Func<T1, T2, T3, TResult>` 有三个输入参数 `T1`, `T2`, `T3`,返回类型为 `TResult`。 5. `Func<T1, T2, T3, T4, TResult...
`Func<T1, T2, ..., TN, TResult>` 是一个泛型委托类型,它允许你封装一个接受N个参数并返回一个TResult类型结果的方法。这里的T1, T2, ..., TN是参数类型,TResult是返回值类型。例如,如果你有一个接受一个整数...
如果方法有参数并返回值,可以使用`Func<T, TResult>`、`Func<T1, T2, TResult>`等,如: ```csharp Func<string, string> RetBook = new Func<string, string>(FuncBook); Console.WriteLine(RetBook("aaa")); ...
例如,`Func<T1, T2, TResult>`表示一个接受两个T1和T2类型参数并返回TResult类型结果的函数。在我们的上下文中,我们可以定义一个Func委托来封装异步方法,该方法接受任何参数并返回一个Task,这正是异步操作的结果...
public delegate TResult Func<in T1, in T2, ..., in TN, out TResult>(T1 arg1, T2 arg2, ..., TN argN); ``` 这里的`T1, T2, ..., TN`是输入参数类型,而`TResult`是返回类型。`Func`委托有多个重载版本,从零个...
此外,`Action`和`Func`还有重载版本,从`Action`到`Action<T1, T2,...,TN>`,以及从`Func<T1, T2,...,TN, TResult>`到`Func<TResult>`,涵盖了不同参数数量和返回值的需求。 在"TestAction"这个示例项目中,我们...
`Func<T1, T2, TResult>`和`Action<T1, T2>`等预定义的泛型委托就是很好的例子。我们可以创建自己的泛型委托,如`MyGenericDelegate<T, U, V>`: ```csharp public delegate V MyGenericDelegate<T, U, V>(T arg1, ...
例如,Func<T>表示一个不带参数但返回一个值的方法,而Func<T1, T2, TResult>则表示一个接受两个参数并返回一个值的方法。 委托是支持事件驱动编程的基础。在C#中,事件是一种特殊的委托,它表示一个动作或一组动作...
例如,`Action<T1, T2>`表示无返回值但接受两个参数的方法,`Func<T1, T2, TResult>`则表示接受两个参数并返回`TResult`类型值的方法。 总结,C#委托是一种强大的工具,它使得代码更加灵活和可扩展。通过理解委托的...
- `Func<TResult>`: 有返回值的委托,如`Func<int>`表示返回整型结果的方法,`Func<T, TResult>`表示接受一个T类型参数并返回TResult类型结果的方法。 这些预定义的泛型委托在日常编码中非常常见,可以方便地用于...
除了 `Action<T>`,还有 `Func<T>` 系列,如 `Func<T, TResult>`,它接受一个参数并返回 `TResult` 类型的结果。例如: ```csharp public static Func<int, string> GetNumberToString = (i) => i.ToString(); ``` ...
自C# 2.0起,可以创建泛型委托,如`Func<T, TResult>`和`Action<T1, T2,...>`。这些预定义的委托类型简化了代码,并提供了类型安全。 10. **委托的内存管理**: 由于委托实例可以持有对方法的引用,因此可能导致...
- 如`Func<T, TResult>`和`Action<T>`是预定义的泛型委托,分别表示返回值类型和无返回值类型。 10. **泛型代码中的默认关键字** - `default(T)`关键字用于获取类型参数`T`的默认值,对于值类型是零,对于引用...
在C#中,Lambda表达式还可以与委托类型关联,如`Func<T1, T2, TResult>`和`Action<T1, T2>`等,这些委托类型代表了参数类型和返回值类型。Lambda表达式可以自动转换为相应的委托类型,使得它们可以直接用于方法调用...
Action<int, int> test2 = (x, y) => { Console.WriteLine("void method(t1, t2)"); }; test1(); test2(2, 3); Func<int> test4 = () => 10; Func<int, int, int> test5 = (x, y) => x * y; ``` 使用泛型委托可以...
而泛型委托类型如`Func<T1, T2, Tresult>`则提供了一种更灵活的方式来表示不同参数和返回类型的函数。 2. **函数类型** 委托类型如`MyFunction`是C#中函数类型的表示,可以存储与之匹配的方法引用。使用`Func...
它们可以接受多个参数类型,如`Func<T1, T2, TResult>`和`Action<T1, T2>`。 - `Func<TResult>`:返回类型为`TResult`,可以有零个或多个输入参数。 - `Action<T>`:没有返回值,可以有零个或多个输入参数。 在...
- `Func<T1, T2, ..., TResult>`:这是一个返回值为`TResult`的委托,可以有多个输入参数(`T1, T2, ...`)。 - `Action<T1, T2, ..., TN>`:这是一个返回值为`void`的委托,同样可以有多个输入参数(`T1, T2, ..., ...
委托类型如`Action`、`Func`等都是预定义的,而`Func<T1, T2, TResult>`则是其中的一个,它表示接受两个参数并返回一个`TResult`类型的结果。 现在,我们结合这两个概念,探讨泛型委托。在上述的`BubbleSorter`类中...