c#没有参数的谓词

时间:2017-03-14 09:26:19

标签: c# anonymous-function func

我试图将谓词传递给函数,但它没有输入。我实际上是在尝试延迟计算,直到进行调用。

有没有办法使用c#谓词类型?如果不是为什么。

我知道使用Func

执行此操作的方法
Func<bool> predicate = () => someConditionBool;

但我想这样做:

Predicate<> predicate = () => someConditionBool;

2 个答案:

答案 0 :(得分:4)

如果它只是一个可读性问题,那么你可以创建自己的委托,它返回布尔值并且没有任何参数:

public delegate bool Predicate();

并以这种方式使用

Predicate predicate = () => someConditionBool;

注意:您应该记住,每个人都熟悉.NET中使用的默认ActionFunc代理,但Predicate是您的自定义代理,它会更少第一次清楚普通程序员。

答案 1 :(得分:2)

  

有没有办法使用c#谓词类型?如果不是为什么?

查看Predicate<T>的签名表明它需要参数或参数:

public delegate bool Predicate<in T>(T obj)

所以这里的快速答案是否定的。因为匿名函数中没有参数。

但是如果你玩一点,你可以给谓词一些不相关的对象,无论如何它都不会用,比如alibi参数:

Func<bool> predicate = () => 1 == 1;
Predicate<object> predicate2 = (x) => 1 == 1;

,电话会是这样的:

Console.WriteLine(predicate());
Console.WriteLine(predicate2(null));

这会编译并返回正确的结果