我需要检查几个布尔值并将其转换为单个布尔值以便于阅读:
service apache2 reload
有没有办法可以将其划分为多行以使其更具可读性?我可以这样做:
bool myBoolean = 5 == 5 && "string" == "String" && true && false && CheckSomethingElse();
但我正在寻找更多内容:
bool myBoolean = 5 == 5;
myBoolean = myBoolean && "string" == "String";
myBoolean = myBoolean && true;
myBoolean = myBoolean && false;
myBoolean = myBoolean && CheckSomethingElse();
但是,第三个代码块与第一个/第二个代码块的功能不同(据我所知)。 C#是否有办法提高第一个代码块的可读性?或者是否有某种正常的方法来编写这样的布尔值?
答案 0 :(得分:7)
为了便于阅读,只需将其解压缩到一个命名方法中,该方法的名称会立即告诉您意图:
public bool FluxCapacitorIsReady()
{
return 5 == 5
&& "string" == "String"
&& true
&& false
&& CheckSomethingElse();
}
现在您可以在代码中调用该方法,任何读者都可以立即清楚地知道发生了什么:
if (FluxCapacitorIsReady())
StartFluxCapacitor();
这是清洁代码的概念:有关详情,请参阅http://cleancoders.com。
答案 1 :(得分:1)
首先,我可能会同意JK等有关重写的一些观点,但是要根据SO指南真正回答你的问题,正确的答案是否,因为该操作符未在C#中定义,你不能超载新的这样的运算符用于布尔类型。
我认为你能得到的最好的是为布尔类型定义一个扩展方法
public static class BoolExtension{
public static bool And(this Boolean first, bool second){
first = first && second;
return first;
}
public static bool MultiAnd(this Boolean first, params bool[] others)
{
foreach (var b in others) first = first && b;
return first;
}
}
然后像这样使用它
bool myBoolean = 5 == 5;
myBoolean.And( "string" == "String");
myBoolean.MultiAnd("A"=="A","B"=="C","D"=="D");
正如您所看到的,这对可读性可能没什么帮助。
在这种情况下,有些人最终会为布尔类实现一个Decorator模式,方法是定义一个在其中包含布尔值的结构/类,并执行您喜欢的运算符重载。