c# 不带参数的谓词
c# Predicate with no parameters
我正在尝试将谓词传递给函数,但它没有输入。我实际上是在尝试延迟计算,直到调用为止。
有没有办法为此使用 c# 谓词类型?如果不是为什么。
我知道用 Func 做这个的方法
Func<bool> predicate = () => someConditionBool;
但我想这样做:
Predicate<> predicate = () => someConditionBool;
Is there a way to use c# Predicate type for that? If not why?
查看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));
这会编译 returns 正确的结果
如果这只是一个可读性问题,那么您可以创建自己的 returns 布尔值且没有任何参数的委托:
public delegate bool Predicate();
并这样使用
Predicate predicate = () => someConditionBool;
注意:您应该记住,每个人都熟悉 .NET 中使用的默认 Action
和 Func
委托,但 Predicate
是您的自定义委托,它将对于普通程序员来说第一次不太清楚。
我正在尝试将谓词传递给函数,但它没有输入。我实际上是在尝试延迟计算,直到调用为止。
有没有办法为此使用 c# 谓词类型?如果不是为什么。
我知道用 Func 做这个的方法
Func<bool> predicate = () => someConditionBool;
但我想这样做:
Predicate<> predicate = () => someConditionBool;
Is there a way to use c# Predicate type for that? If not why?
查看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));
这会编译 returns 正确的结果
如果这只是一个可读性问题,那么您可以创建自己的 returns 布尔值且没有任何参数的委托:
public delegate bool Predicate();
并这样使用
Predicate predicate = () => someConditionBool;
注意:您应该记住,每个人都熟悉 .NET 中使用的默认 Action
和 Func
委托,但 Predicate
是您的自定义委托,它将对于普通程序员来说第一次不太清楚。