【问题标题】:Predicate<Bool>, pointless or useful?Predicate<Bool>,无意义还是有用?
【发布时间】:2011-01-14 04:32:44
【问题描述】:

我试图理解 Predicate&lt;T&gt; 类型,当 T 是任何东西时,我可以理解它,除了 bool。如果你有Predicate&lt;bool&gt;,我看不出它怎么用。

有人能告诉我这是一件愚蠢的事情还是真的有目的?

Predicate&lt;T&gt; 已经返回一个布尔值,所以在布尔值上测试一个条件似乎有点毫无意义......还是我弄错了?

【问题讨论】:

  • 觉得没用的就别用了。还是我在这里遗漏了什么?
  • @Aaron:我问是因为我想知道它是否真的有任何用途,因为我想不出任何用途......
  • 为什么它需要任何用途?将其定义为Predicate&lt;T not Boolean&gt; 是否有意义?
  • @Anon:正如您从答案中看到的那样,在某些(不是很多情况下)使用它确实有意义。我不知道你在说什么?

标签: c# boolean predicate


【解决方案1】:

谓词表示一个函数,它接受一个 T(任何类型)并返回一个布尔值。

Predicate<int> isEven = i => i % 2 == 0;

你基本上是对的。对于 bool,想到的用途并不多。我的意思是,你只能用一个 bool 做很多事情。

Predicate<bool> isFalse = input => !input;
Predicate<bool> isTrue = input => input;

你可以这样使用它:

var listOfBools = new List<Bool>() { true, false, false, true, true };
var trues = listOfBools.FindAll(isTrue);
var falses = listOfBools.FindAll(isFalse);

它肯定没那么有用,只是因为你只能用一个 bool 做很多事情。

【讨论】:

    【解决方案2】:

    好吧,仅仅因为你已经有一个布尔值并不意味着你想准确地返回那个布尔值。例如,我可以想象 IsFalse 谓词在参数为假时返回真。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2013-11-20
      • 2013-11-14
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多