解释下Func<T, bool> exp
比如
interface IRepository<T> where T:class
{
IEnumerable<T> FindAll(Func<T, bool> exp);
}
我现在要调用FindAll方法,要怎么用?
Func<T, bool> exp
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<string> list = new List<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);
解释下Func<T, bool> exp的更多相关文章
- lambda表达式Expression<Func<Person, bool>> 、Func<Person, bool>区别
前言: 自己通过lambda表达式的封装,将对应的表达式转成字符串的过程中,对lambda表达式有了新的认识 原因: 很多开发者对lambda表达式Expression<Func<Pers ...
- 转自pnljs 委托(Func<int,bool>)
随笔- 147 文章- 0 评论- 16 Func的介绍 经常看到 Func<int, bool>...这样的写法,看到这样的就没有心思看下去了.我们学技术还是需要静下心来. 对Fu ...
- C#中Predicate<T>与Func<T, bool>泛型委托的用法实例
本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 ...
- .NetCore 扩展封装 Expression<Func<T, bool>> 查询条件遇到的问题
前面的文章封装了查询条件 自己去组装条件,但是对 And Or 这种组合支持很差,但是也不是不能支持,只是要写更多的代码看起来很臃肿 根据 Where(Expression<Func< ...
- Entity Framework 动态构造Lambda表达式Expression<Func<T, bool>>
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...
- .NET Core中合并Expression<Func<T,bool>>的正确姿势
这是在昨天的 .NET Core 迁移中遇到的问题,之前在 .NET Framework 中是这样合并 Expression<Func<T,bool>> 的: public s ...
- Predicate<T>与Func<T, bool>泛型委托
引用别人的: static void Main(string[] args) { List<string> l = new List<string>(); l.Add(&quo ...
- Expression<Func<TObject, bool>>与Func<TObject, bool>的区别
Func<TObject, bool>是委托(delegate) Expression<Func<TObject, bool>>是表达式 Expression编译后 ...
- 表达式拼接Expression<Func<IEntityMapper, bool>> predicate
/// <summary> /// 重写以筛选出当前上下文的实体映射信息 /// </summary> protected override IEnumerable<IE ...
随机推荐
- 【t073】&&【t015】魔法物品
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有两种类型的物品:普通物品和魔法物品.每种普通物品有一个价值P,但每种魔法物品有两种价值:鉴定前的价值 ...
- tensorflow 的版本差异与变化
官方文档的说明,Transitioning to TensorFlow 1.0 1. 简单列举如下 变量 tf.VARIABLES ⇒ tf.GLOBAL_VARIABLES tf.all_varia ...
- ORACLE中死锁
ORACLE中死锁的知识点总结 死锁的概念 什么是死锁呢? 其实我们生活中也有很多类似死锁的例子. 我先举一个生活中的例子:过年回家,父亲买了一把水弹枪,儿子和侄子争抢着要先玩,谁也不让谁,拆开包 ...
- webcollector + selenium 爬取空间相册图片
package cn.hb.util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWr ...
- 于CentOS 6.5编译器安装Git 1.8
yum install git版本号是太老,它是1.7.1. 在这里,我们将介绍如何编译和安装Git 1.8 yum install curl-devel expat-devel gettext-de ...
- How to provide highlighting with Spring data elasticsearch
How to provide highlighting with Spring data elasticsearch @Test public void shouldReturnHighlighted ...
- Codeforces 385 D Bear and Floodlight
主题链接~~> 做题情绪:时候最后有点蛋疼了,处理点的坐标处理晕了.so~比赛完清醒了一下就AC了. 解题思路: 状态压缩DP ,仅仅有 20 个点.假设安排灯的时候仅仅有顺序不同的问题.全然能 ...
- http_load测试初阶
http_load的标准的两个例子是: 1. http_load -parallel 5 -fetches 1000 urls.txt 2. http_load -ra ...
- 拦截和跟踪HTTP请求的主要方法及实现
一.HTTP 请求的拦截技术可以广泛地应用在反向代理.拦截 Ajax 通信.网页的在线翻译.网站改版重构等方面.而拦截根据位置可以分为服务器端和客户端两大类,客户端拦截借助 JavaScript 脚本 ...
- Android--常用框架大全
1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的磁盘缓存 2.图片加载 名称 描述 Android Universal Image Loader 一个强大的加载,缓存,展示图 ...