Predicate 是类似于 Func 和 Action 委托的委托。 它表示一个包含一组标准的方法,并检查传递的参数是否满足这些标准。 Predicate委托方法必须接受一个输入参数并返回一个布尔值 - 真或假。
Predicate 委托在 System 命名空间中定义,如下所示:
public delegate bool Predicate<in T>(T obj);
与其他委托类型一样,Predicate 也可以与任何方法、匿名方法或 lambda 表达式一起使用。
class Program
{
static bool IsUpperCase(string str)
{
return str.Equals(str.ToUpper());
}
static void Main(string[] args)
{
Predicate<string> isUpper = IsUpperCase;
bool result = isUpper("hello world!!");
Console.WriteLine(result); //False
}
}
匿名方法也可以分配给 Predicate 委托类型,如下所示。
static void Main(string[] args)
{
Predicate<string> isUpper = delegate (string str)
{
return str.Equals(str.ToUpper());
};
bool result = isUpper("hello world!!");
Console.WriteLine(result); //False
}
也可以将 lambda 表达式分配给 Predicate 委托类型,如下所示。
static void Main(string[] args)
{
Predicate<string> isUpper = it => it.Equals(it.ToUpper());
bool result = isUpper("hello world!!");
Console.WriteLine(result); //False
}
linq里面大量使用了 Predicate 委托,例如下面list的where方法。它就接收了 Func<TSource, bool> predicate
这样一个委托。
我们可以通过它很方便的做过滤。
using System;
using System.Collections.Generic;//需要这个命名空间
using System.Linq; //需要这个命名空间
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var list = new List<int>() { 1, 3, 5, 6 };
var result = list.Where(it => it > 3);
Console.WriteLine(string.Join(",", result));// 输出 5,6
}
}
}