我试图将谓词传递给函数,但它没有输入。我实际上是在尝试延迟计算,直到进行调用。
有没有办法使用c#谓词类型?如果不是为什么。
我知道使用Func
执行此操作的方法Func<bool> predicate = () => someConditionBool;
但我想这样做:
Predicate<> predicate = () => someConditionBool;
答案 0 :(得分:4)
如果它只是一个可读性问题,那么你可以创建自己的委托,它返回布尔值并且没有任何参数:
public delegate bool Predicate();
并以这种方式使用
Predicate predicate = () => someConditionBool;
注意:您应该记住,每个人都熟悉.NET中使用的默认Action
和Func
代理,但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));
这会编译并返回正确的结果