比如 interface IRepository<T> where T:class
{
IEnumerable<T> FindAll(Func<T, bool> exp);
}
我现在要调用FindAll方法,要怎么用啊?
{
IEnumerable<T> FindAll(Func<T, bool> exp);
}
我现在要调用FindAll方法,要怎么用啊?
解决方案 »
- SQL语句去除重复数据并根据AddTime取各ID的最后一条数据
- 程序里调用外部一个命令程序 在vs上可以运行 ,IIS上运行不了
- ajax返回中文是乱码,有啥好办法吗?
- 最近偶用WEB2.0+DIV+CSS开发了个人小网站,欢迎大家光临,多多指导啊
- 有人做过网站与IM结合吗?希望有做过的进来指点一二
- 怎么样能在另一个新页打开,原面又不会刷新?要求是在.cs文件中写
- ADODB.Recordset 错误 '800a0e7d' 请帮忙解决!
- 请问vs2005能否与vs2003安装在一个系统下
- 如何在用javascript:history.back();返回后自动刷新返回后的页面
- 为何我的水晶报表预览窗口没有打印按钮
- ibatis 语句怎么写 ?
- 新手求帮助,ASP.NET预约取消问题
1、Func是代表方法
2、T代表任何类型
3、bool代表不累类型
4、exp是方法的实例这个总体就是一个方法作为FindAll的参数,进行传递。
1、Func是一个匿名委托(形参exp的类型)
T是Func这个委托中的传入参数,即接口IRepository<T>的类型参数,由于带有约束where T:class, 所以T只能是类,而不能是结构等其他类型
bool代表Func的返回参数类型为bool
2、exp是方法的形参,Func委托类型的实例
3、IEnumerable<T>是方法的返回类型用的时候可以这样
List<string> list = new List<string>();
这里只是举一个例子,实际中,只要是实现了IRepository<T>这个接口的类实例都可以这么用
list.FindAll(new Func<string, bool>(delegate(string str){ return str.Length > 0; }));
list.FindAll(delegate(string str) { return str.Length > 0; });
list.FindAll(new Func<string, bool>(str => {return str.Length > 0;}));
list.FindAll(new Func<string, bool>(str => str.Length > 0));写法都是等效的,编译以后FindAll()里面的部分都是一个委托类型的实例
最后一个直接简化成一个Lambda表达式了
整个方法的返回类型为IEnumerable<string>
list.FindAll(new Func<string, bool>(delegate(string str){ return str.Length > 0; }));
list.FindAll(delegate(string str) { return str.Length > 0; });
list.FindAll(str => {return str.Length > 0;});
list.FindAll(str => str.Length > 0);