【问题标题】:Conditional bool check from tuple groups C#来自元组组的条件布尔检查 C#
【发布时间】:2021-01-29 20:45:32
【问题描述】:

我以为这是一个简单的问题,结果至少对我来说没有那么简单。

我有

(bool isEqual, bool duplicateCheckEnabled) group1 = (false, false);
(bool isEqual, bool duplicateCheckEnabled) group2 = (true, true);
(bool isEqual, bool duplicateCheckEnabled) group3 = (true, true);
(bool isEqual, bool duplicateCheckEnabled) group4 = (false, true);
(bool isEqual, bool duplicateCheckEnabled) group5 = (false, false);

这些值是从外部逻辑填充的。我会使用另一个对象的每个元组属性。 对于从group1group5duplicateCheckEnabled 为真的所有组,我想检查所有相应的isEqual 标志是否为真。对于上面给定的值,我只想考虑 group2group3group4 isEqual(根据 duplicateCheckEnabled flag true),以便表达式计算为

bool isDuplicate = group2.isEqual && group3.isEqual && group4.isEqual

我是否应该使用数组来仅存储我希望应用 isEqual 比较的组?

【问题讨论】:

  • 你为什么不首先使用数组?使用 LINQ 可以轻松完成这项工作。
  • 我会使用不同的逻辑填充 5 个组,认为单独维护它更容易,但我明白你的意思。如果我有一个具有两个布尔属性的对象数组并找到一种简单的设置方法,那么更容易过滤掉

标签: c# boolean boolean-logic boolean-expression


【解决方案1】:

虽然这可以在没有数组的情况下完成:

bool isDuplicate = (!group1.duplicateCheckEnabled || group1.isEqual) &&
                   (!group2.duplicateCheckEnabled || group2.isEqual) &&
                   (!group3.duplicateCheckEnabled || group3.isEqual) &&
                   (!group4.duplicateCheckEnabled || group4.isEqual) &&
                   (!group5.duplicateCheckEnabled || group5.isEqual);

您仍应将所有这些值放入数组/列表中,最好是自定义结构/类。

YourCustomStruct[] groups = { ... };
bool isDuplicate = groups.Aggregate(true, (x, y) => x && (!y.DuplicateCheckEnabled || y.IsEqual));

【讨论】:

    猜你喜欢
    • 2011-01-24
    • 2016-01-27
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2011-04-24
    相关资源
    最近更新 更多