有没有更有效/可读/更漂亮的方式来编写此条件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有更有效/可读/更漂亮的方式来编写此条件?相关的知识,希望对你有一定的参考价值。

我正在用C#学习条件语句,我了解了它们的基本工作原理。

A? B:C

其中A =布尔条件

B = A == True时的结果

C =当A ==假时的结果

我的问题更多是写一个复杂的条件。我正在尝试写:

((A == B || A == C)? D:E

我希望条件看起来更像:

A ==(B || C)? D:E

但是这仅在A,B和C为布尔值并且我正在尝试比较整数时才有效。

如果没有简单的方法可以减少这种情况,那没关系。我一直在努力使我的代码更高效,更易于阅读。

谢谢

            var passedRadioGroup = (RadioGroup)sender;
            (passedRadioGroup.CheckedRadioButtonId == Resource.Id.radioButtonPass || passedRadioGroup.CheckedRadioButtonId == Resource.Id.radioButtonFail) ?
                checklistItems[passedRadioGroup.Id].PassedBool = passedRadioGroup.CheckedRadioButtonId == Resource.Id.radioButtonPass :
                checklistItems[passedRadioGroup.Id].PassedBool = null;

CheckedRadioButtonId是一个整数

radioButtonPass是一个整数

radioButtonFail是一个整数

PassedBool是可为空的布尔值

基本上,如果CheckedRadioButtonId等于radioButtonPass或radioButtonFail,我希望将PassedBool设置为true或false,否则我希望它为null。

答案
正如狂想所言,这并没有按照您的想法做。

让我们看一下A =错误B =真C = False

对于(A == B || A == C)? D:EA不等于B但A等于C,因此结果为D

对于A ==(B || C)? D:EB || C等于true。 A不等于true。因此结果是E。

而且不,此逻辑没有内置的快捷方式。

但是,我过去在代码中编写了扩展方法,在这些代码中,我经常发现自己做很多A == X ||。 A == Y || A == Z

public static bool In(this int val, params int[] compareTo) for(int i=0;i<compareTo.Length; i++) if(compareTo[i] == val) return true; return false;

然后您可以这样拨打电话

if( A.In(X,Y,Z)) //do stuff

另一答案
您可以通过在if中测试第一个,然后在else中测试第二个,如果两个都不匹配,最后一个else来测试null来进行测试。 (您也可以将其作为带有两种情况和默认值的switch语句来执行此操作,但前提是Pass和Fail值是常量,尚不清楚。)

另一种方法以及您正在寻找的更多方法是将两个条件链接到一个表达式中,以模仿if-else-if-else:

var passedRadioGroup = (RadioGroup)sender; checklistItems[passedRadioGroup.Id].PassedBool = (passedRadioGroup.CheckedRadioButtonId == Resource.Id.radioButtonPass ? true : (passedRadioGroup.CheckedRadioButtonId == Resource.Id.radioButtonFail ? false : null) );

这可能满足“更漂亮”和“更高效”的要求,因为它避免了重复比较(您的原始内容与radioButtonPass进行了两次比较);还请注意,? :是一个表达式,因此它应求值为一个值,而不是执行赋值(尽管您可以合法地执行这两个操作;赋值的值只是分配的值,因此可以像[ C0]将A = B = C;A都设置为B的值)。在您的情况下,您只想将确定的值分配给一个位置,因此像这样的条件在分配的RValue表达式中更为合适。

以上是关于有没有更有效/可读/更漂亮的方式来编写此条件?的主要内容,如果未能解决你的问题,请参考以下文章

编写此查询的更好/更有效的方法

是否有另一种方式(更有效的方式)来编写代码,以便它可以运行得更快?

使用枚举在结构中设置基于案例的变量的更有效方法

有没有更有效的方法来编写 $('parent > child')?

此 SQL 查询是不是有更有效的替代方法?

有没有更有效的方法来执行这个嵌套的 SQL 查询?