来自元组 C 的条件布尔检查#

Conditional bool check from tuple groups C#

提问人:KeenUser 提问时间:10/15/2020 最后编辑:Dmitry BychenkoKeenUser 更新时间:10/15/2020 访问量:274

问:

我以为这是一个简单的问题,但结果并非如此简单,至少对我来说是这样。

我有

(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);

这些值是从外部逻辑填充的。我将使用另一个对象来区分这些元组属性中的每一个。 对于从 到 的所有组,我想检查是否所有相应的标志都为 true。对于上面给定的值,我只想考虑 和 isEqual(根据 ),以便表达式的计算结果为group1group5duplicateCheckEnabledisEqualgroup2group3group4duplicateCheckEnabledflag true

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

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

C# 值 布尔逻辑 布尔 值表达式

评论

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

答:

1赞 Sweeper 10/15/2020 #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));