2015-06-22 64 views
1

我有几个布尔我需要检查,变成一个布尔的可读性:C#有没有办法可以&& =?

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

然而,第三代码块不会做同样的事情,第一/第二(我所知道的)。 C#有没有办法提高第一个代码块的可读性?还是有某种正常的方式来编写这样的布尔值?

+1

创建一个适当命名的方法 –

+0

BTW ..把你的情况分解成多行,这样会使可读性变得更糟。一条语句允许跨越多行,因此只需在您的第一行样本中的每个&&前面添加一行。 –

+0

转到MSDN并寻找c#操作符 –

回答

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模式。

+0

,这可能是一个很好的答案,请不要定义这样的扩展方法! - >“正如你所看到的,这对可读性可能没有多大帮助。” ! –

+0

@MitchWheat我个人从未做过 – n00b

+1

如果你使用'params',为什么你需要不同的方法来处理单个'bool'和多个'bool'?如果删除'And'并将'MultiAnd'重命名为'And',它将以同样的方式工作:) –

7

为了增强可读性,只需解压出来到一个名为方法,其中该方法的名称立刻告诉你的意图:

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

现在,你可以调用这个方法在你的代码,它是清醒时立即给任何读者是怎么回事:

if (FluxCapacitorIsReady()) 
    StartFluxCapacitor(); 

这是清洁代码的一个概念:看http://cleancoders.com更多。

+2

这并不回答整个问题。它提供了一个很好的选择,但它不是一个完整的答案。 – Enigmativity

+0

它回答了这个问题:“我需要检查并将其转换为一个可读性布尔值:” –

+0

@MitchWheat - 我更关心标题“Does C#有一种方法可以&& =?”。 – Enigmativity

相关问题