C# 有办法实现 &&= 吗?

Does C# have a way to &&=?

我有几个布尔值需要检查并转换为单个布尔值以提高可读性:

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

但我正在寻找更多类似的东西:

bool myBoolean = 5 == 5;
myBoolean &= "string" == "String";
myBoolean &= true;
myBoolean &= false;
myBoolean &= CheckSomethingElse();

然而,第三个代码块与 first/second 的功能不同(据我所知)。 C# 是否有办法提高第一个代码块的可读性?或者是否有某种正常的方法来编写这样的布尔值?

为了可读性,只需将其提取到命名方法中,方法名称会立即告诉您意图:

public bool FluxCapacitorIsReady()
{
    return 5 == 5 
           && "string" == "String" 
           && true 
           && false 
           && CheckSomethingElse();
}

现在您只需在代码中调用该方法,reader 任何人都可以立即清楚发生了什么:

if (FluxCapacitorIsReady())
    StartFluxCapacitor();

这是 Clean Code 中的一个概念:有关更多信息,请参阅 http://cleancoders.com

首先,我可能同意 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");

如您所见,这可能对可读性没有多大帮助。

在这种情况下,有些人最终通过定义一个 struct/class 来实现布尔值 class 的装饰器模式,其中包含一个布尔值并执行您喜欢的运算符重载。