(转)C#中的Predicate<T>与Func<T, bool>

Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。这个是祖宗。
  Func可以接受0个至16个传入参数,必须具有返回值。
  Action可以接受0个至16个传入参数,无返回值。
  Predicate只能接受一个传入参数,返回值为bool类型。

public delegate bool Predicate<in T>(T obj);
public delegate TResult Func<in T, out TResult>(T arg);  

Func<T, bool> :表示有传入T类型的参数,返回值为bool的委托

Predicate<T>:表示有传入T类型的参数,返回值为bool的委托

static void Main(string[] args)
{
    Predicate<int> myPredicate = i => i > 10;
    Func<int, bool> myFunc = i => i > 10;
    List<int> list = new List<int>();
    list.Add(5);
    list.Add(9);
    list.Add(20);
    list.Add(30);
    List<int> newList = list.FindAll(myPredicate);
    List<int> newListFunc = list.Where(myFunc).ToList();
    Console.ReadKey();
} 

看到Predicate和Func接受的是完全相同的Lambada表达式,

而且执行结果newList和newListFunc完全相同。

http://blog.csdn.net/rye_grass/article/details/66041423  C#中的Predicate<T>与Func<T, bool>

原文地址:https://www.cnblogs.com/shy1766IT/p/8227649.html

时间: 2024-10-13 05:18:33

(转)C#中的Predicate<T>与Func<T, bool>的相关文章

C#中Predicate&lt;T&gt;与Func&lt;T, bool&gt;泛型委托的用法实例

本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 static void Main(string[] args) { List<string> l = new List<string>(); l.Add("a"); l.Add("b");

.NET Core中合并Expression&lt;Func&lt;T,bool&gt;&gt;的正确姿势

这是在昨天的 .NET Core 迁移中遇到的问题,之前在 .NET Framework 中是这样合并 Expression<Func<T,bool>> 的: public static class ExpressionBuilder { public static Expression<T> Compose<T>(this Expression<T> first, Expression<T> second, Func<Expr

C#语法糖之第六篇: 泛型委托- Predicate&lt;T&gt;、Func&lt;T&gt;

今天继续分享泛型委托的Predicate<T>,上篇文章讲了Action委托,这个比Action委托功不一样的地方就是委托引用方法是Bool返回值的方法,Action为无返回值.首先我们看一下它的定义吧: 1 public delegate bool Predicate<T>(T obj); 从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明函数参数所引用

表达式拼接Expression&lt;Func&lt;IEntityMapper, bool&gt;&gt; predicate

/// <summary> /// 重写以筛选出当前上下文的实体映射信息 /// </summary> protected override IEnumerable<IEntityMapper> EntityMappersFilter(IEnumerable<IEntityMapper> entityMappers) { Type contextType = typeof(TDbContext); Expression<Func<IEntityM

Func&lt;T, bool&gt;与Expression&lt;Func&lt;T, bool&gt;&gt;的区别

Func<T, bool>是委托(delegate) Expression<Func<T, bool>>是表达式 Expression编译后就会变成delegate,才能运行.比如 Expression<Func<int, bool>> ex = x=>x < 100; // 将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示该 lambda 表达式的委托. Func<int, bool> func = e

多条件Expression&lt;Func&lt;T, bool&gt;&gt;

EF中需要传入多条件的Expression<Func<T, bool>>时可以这样用: (u) => (u.Receiver == name && u.isRead == true)

Expression&lt;Func&lt;TObject, bool&gt;&gt;与Func&lt;TObject, bool&gt;的区别

Func<TObject, bool>是委托(delegate) Expression<Func<TObject, bool>>是表达式 Expression编译后就会变成delegate,才能运行.比如 Expression<Func<int, bool>> ex = x=>x < 100; Func<int, bool> func = ex.Compile(); 然后你就可以调用func: func(5) //-返回

lambda表达式Expression&lt;Func&lt;Person, bool&gt;&gt; 、Func&lt;Person, bool&gt;区别

前言: 自己通过lambda表达式的封装,将对应的表达式转成字符串的过程中,对lambda表达式有了新的认识 原因: 很多开发者对lambda表达式Expression<Func<Person, bool>> .Func<Person, bool>表示存在疑惑,现在就用代码举个简单列子 原代码: using System;using System.Collections.Generic;using System.Linq;using System.Linq.Expres

return columns.All(new Func&lt;string, bool&gt;(list.Contains));

internal static bool VerifyColumns(SqlConnection conn, string table, params string[] columns)         {             List<string> list = new List<string>();             using (SqlCommand sqlCommand = new SqlCommand("SELECT COLUMN_NAME FROM