C#有办法和&& =?

时间:2015-06-22 00:41:18

标签: c# boolean readability

我需要检查几个布尔值并将其转换为单个布尔值以便于阅读:

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#是否有办法提高第一个代码块的可读性?或者是否有某种正常的方法来编写这样的布尔值?

2 个答案:

答案 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模式,方法是定义一个在其中包含布尔值的结构/类,并执行您喜欢的运算符重载。