有没有更有效/可读/更漂亮的方式来编写此条件?
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-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表达式中更为合适。
以上是关于有没有更有效/可读/更漂亮的方式来编写此条件?的主要内容,如果未能解决你的问题,请参考以下文章
是否有另一种方式(更有效的方式)来编写代码,以便它可以运行得更快?