如何检查 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));
我在 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));