将else与多个if语句一起使用C#

将else与多个if语句一起使用C#,c#,if-statement,logic,conditional-statements,C#,If Statement,Logic,Conditional Statements,有没有办法快速检查以下逻辑?我用的是C 这与使用if-else不同,因为a、b和c可以同时为真。所以我不能那样叠。如果(!a&&!b&&!c),我想在不写入的情况下检查a、b和c是否都为false。这是因为当if条件变得更加复杂时,代码可能变得非常混乱。它需要重写大量代码。这可能吗?嗯,这不是很“干净”,但我愿意 bool noneAreTrue = true; if(a) { noneAreTrue = false; } if(b) { noneAreTrue = false;

有没有办法快速检查以下逻辑?我用的是C

这与使用if-else不同,因为a、b和c可以同时为真。所以我不能那样叠。如果(!a&&!b&&!c),我想在不写入
的情况下检查a、b和c是否都为false。这是因为当if条件变得更加复杂时,代码可能变得非常混乱。它需要重写大量代码。这可能吗?

嗯,这不是很“干净”,但我愿意

bool noneAreTrue = true;
if(a)
{
    noneAreTrue = false;
}
if(b)
{
    noneAreTrue = false;
}
if(c)
{
    noneAreTrue = false;
}
if(noneAreTrue)
{
    //execute if all above conditions are false
}
此外,如果您的条件非常大,我建议使用Robert C.Martin的《清洁代码》一书中的规则G28(封装条件)

它相当冗长,但在某些情况下更容易阅读:

public void YourMethod()
{
    if(SomeComplexLogic())
    {
    }
    if(SomeMoreLogic())
    {
    }
    if(EvenMoreComplexLogic())
    {
    }
    if(NoComplexLogicApply())
    {
    }
}

private bool SomeComplexLogic(){
    return stuff;
}

private bool EvenMoreComplexLogic(){
    return moreStuff;
}

private bool EvenMoreComplexLogic(){
    return evenMoreStuff;
}

private bool NoComplexLogicApply(){
    return SomeComplexLogic() && EvenMoreComplexLogic() && EvenMoreComplexLogic();
}

如何将策略和规范的概念结合起来

var strategies = _availableStrategies.All(x => x.IsSatisfiedBy(value));
foreach (var strategy in strategies)
{
    strategy.Execute(context);
}
if (!strategies.Any()) {
    // run a different strategy
}

与其将一些复杂的条件封装在一个只调用一次或两次的方法中,不如将其保存在一个变量中。这也比其他答案所建议的使用布尔标记更具可读性

一个人为的例子

bool isBlue = sky.Color == Colors.Blue;
bool containsOxygen = sky.Atoms.Contains("oxygen") && sky.Bonds.Type == Bond.Double;
bool canRain = sky.Abilities.Contains("rain");
if(isBlue)
{
}
if(containsOxygen)
{
}
if(canRain)
{
}
if(!isBlue && !containsOxygen && !canRain)
{
}

现在,我们已经将可能是复杂的条件抽象为可读的英语

对于复杂的情况也可以,但可能不只是3种情况。引用以下问题:“这是因为当if条件变得更复杂时,代码可能会变得非常混乱。这需要重写大量代码。”其他解决方案很难看,对可维护性没有帮助。您也可以使用Func的和/或操作,而不是我给出的解决方案,这可能会简化实现。是的,我喜欢您的解决方案,我认为它是最干净的,这就是为什么我对它投了赞成票。但要使用它,您确实需要确保有一个复杂的场景,因为在一个简单的情况下,所有背后的工作可能都不值得。也许你可以在你的回答中展示一个IST战略的实施。
bool isBlue = sky.Color == Colors.Blue;
bool containsOxygen = sky.Atoms.Contains("oxygen") && sky.Bonds.Type == Bond.Double;
bool canRain = sky.Abilities.Contains("rain");
if(isBlue)
{
}
if(containsOxygen)
{
}
if(canRain)
{
}
if(!isBlue && !containsOxygen && !canRain)
{
}