如何检查 Predicate return 中的一个函数是否为真?

how to check if one function from Predicate return true?

我在 c# 上有一个 Predicate(包括一些函数)。

我想玩谓词,但我想知道函数中的 1 个(至少)是否 return 为真。

例如:

class Program
{
    public static bool fun1(int x)
    {
        Console.WriteLine("2");

        return true;

    }
    public static bool fun2(int y)
    {
        Console.WriteLine("1");
        return false;
    }

    static void Main(string[] args)
    {
        Predicate<int> pre=fun1;
        pre+=fun2;
        pre(2);
        Console.ReadKey();

    }
}

我想知道 func1 和 func2 return 是否正确。

谢谢!

你可以做到。

Predicate<int> pre = fun1;
pre += fun2;
bool result = pre.GetInvocationList().Cast<Predicate<int>>().Any(d => d(2));

获取所有可用的代表。将它们转换回 Predicate<int>,然后使用 Any 检查是否有任何 return 为真。

注意:如果您不这样做,结果将等于上次委托的结果。

bool result = pre(2); // depends on last delegate.

更新:

GetInvocationList returns Delegate 的数组(不是列表)。 Delegate 是所有代表的基础 class。顺便说一句,你不能直接调用它们。还有两种其他方法可以从基 class 调用委托。首先是使用 DynamicInvoke。它将 return 结果为 object,因此您需要将其转换回 bool

bool result = pre.GetInvocationList().Any(d => (bool)d.DynamicInvoke(2));

另一种方法是在 Any 中转换委托。

bool result = pre.GetInvocationList().Any(d => ((Predicate<int>)d)(2));