C# - 断言委托 Predicate Delegate

Predicate 是类似于 FuncAction 委托的委托。 它表示一个包含一组标准的方法,并检查传递的参数是否满足这些标准。 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
        }
    }
}

要记住的要点:

  • 谓词委托采用一个输入参数和布尔返回类型。
  • 匿名方法和 Lambda 表达式可以分配给谓词委托。
上一篇:C# action委托
下一篇:C# 匿名方法
最近更新的
...