【问题标题】:Returning booleans in a C# method在 C# 方法中返回布尔值
【发布时间】:2010-10-04 00:06:15
【问题描述】:

我有一个由循环填充的布尔数组。拥有该数组的方法需要返回一个布尔值。那么我可以这样做吗:

bool[] Booleans = new bool[4];

// do work - fill array

return (Booleans[0] && Booleans[1] && Booleans[2] && Booleans[3]);

所以如果我有:T,T,F,T 我会得到F,因为数组中有一个,或者它会发回其他东西还是一起崩溃?

【问题讨论】:

  • 很好的方法,直到您更改数组中的项目数,然后循环方法如下@James的答案。
  • 离题了,因为我现在对@Mark 编辑我的问题并在我不粗俗的情况下删除我的一半句子真的很不满意。我只是不明白当时的思考过程是什么?
  • 这与粗俗无关,我删除了它,因为它没有增加任何价值,如果您查看仅显示前两行的问题摘要,您所看到的只是随机的胡扯与问题无关。如果您想感谢某人回答了您的问题,请在他们的回答下方的评论中写信给他们。如果这是个人的感谢,他们会更加感激。
  • 如果您想讨论我的编辑是否不当,那么更好的讨论地点是meta.stackoverflow.com。您可以在那里提出问题(或搜索之前已回答的类似问题)。
  • 好的,现在我可以理解你为什么这样做了,但你必须明白,从我的角度来看,我的问题在没有任何解释的情况下被改变了。我敢肯定,如果对你做同样的事情,你不会高兴的。无论如何,感谢您解释为什么这样做。

标签: c# arrays


【解决方案1】:

单个false 将导致false 以布尔AND 逻辑返回。

你也可以改写为:

return Booleans.All(b => b);

为了完整起见,或者如果 LINQ 不是一个选项,您可以通过循环实现相同的目的:

var list = new List<bool> { true, false, true };

bool result = true;
foreach (var item in list)
{
    result &= item;
    if (!item)
        break;
}

Console.WriteLine(result);

对于小样本,你有什么是好的,但随着项目数量的增加,上述任何一种方法都会使代码更加友好。

【讨论】:

  • 我觉得All在这里有点矫枉过正。
  • 我之前没用过All。你能解释一下它到底是做什么的吗?在这种情况下,它与Any 有何不同(优于?)?
  • All 要求每个项目为真,而 Any 要求一个项目为真 - 项目的逻辑 AND VS 逻辑 OR。在这种情况下,您需要 All,因为数组中的所有元素都应该为 true,才能返回 true。
  • @Alex All 用于检查所有项目是否符合给定条件。由于您正在处理布尔值,因此您可能希望使用 All 并检查它们是否都是 true,如我的 sn-p 所示。 Any 用于检查至少一个项目(即任何项目)是否满足给定标准。在这种情况下,您不想使用 Any,因为它不会考虑所有元素,而只会在任何项目符合条件时返回 true。
  • AllAny 的更严格的兄弟。它只是验证序列的所有元素是否符合给定的标准。在这种情况下,您可以使用其中任何一种,但使用相反的测试。使用All 验证所有值是否为真,或Any 验证是否至少有一个为假(如果是则返回假)。
【解决方案2】:

如果您必须处理数组并只返回一个布尔值,那么最好的方法是将一个值设置为 true,然后循环直到该值为 false,或者您到达循环的末尾。

这样您就不必处理超过第一个 false 值,因为这会使整个结果为 false。

如何循环取决于您使用的 .NET 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2015-09-10
    • 2012-11-04
    • 2015-06-18
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多