这个if-else-else逻辑可以改写成更整洁的东西吗?

时间:2010-08-24 16:25:33

标签: c# .net boolean-logic

我能以更简单,更易于阅读的方式编写以下逻辑吗?以下是我需要的,但它非常混乱:

if (IsChanged == true)
{
    return;
}

else if (Status == "" && IsChanged == false) // Executed when the close (x) button is pressed, as the Status string is not yet set to a real value...
{
    CancelClose();
}

else if (IsChanged == false && Status == "saving") // saving logic falls to here...
{
    // IsChanged = false;
}

由于

11 个答案:

答案 0 :(得分:20)

if (isChanged) return;

switch (Status) {
   case "": 
       CancelClose(); 
       break;
   case "saving": 
       // IsChanged = false;
       break;
}

这和它一样整洁。请注意,因为如果isChanged为true,则返回,您可以进一步假设isChanged为false。

答案 1 :(得分:12)

这有点清洁:

if (IsChanged)
{

}
else if (Status == "saving")
{

}
else if (Status == "")
{

}
else
{

}

我建议您使用enum来表示状态。这将允许您的代码被强类型化。

public enum Status
{
    Closing,
    Saving,
    Changed,
}

然后你可以使用一个很好的switch语句来决定采取什么行动。

switch (_status)
{
    case Status.Saving:
        break;
    case Status.Closing:
        break;
    case Status.Changed:
        break;
    default:
        break;
}

答案 2 :(得分:4)

if(IsChanged)
  return;

if(Status == "saving")
{
    // save      
}
else if(string.IsNullOrEmpty(Status))
{
    CancelClose();    
}

答案 3 :(得分:2)

如果IsChanged == true,则返回,因此在其他ifs中不需要它。

    if (IsChanged == true)
        return;

    switch (Status)
    { 
       case "":
        CancelClose();
        break;
       case "saving":
        break;
    }

答案 4 :(得分:1)

是:

   if (IsChanged) return;
   if (String.IsNullOrEmpty(Status)) CancelClose();

答案 5 :(得分:1)

  • 切断第一个,如果是的话。如果IsChanged为真,则永远不会达到“else”。
  • 从其他ifs中删除IsChanged == false,因为它们始终为true。
  • 考虑枚举,而不是字符串。

我建议:

if (IsChanged)
{
      return;
}

if (CurrentStatus == Status.None) 
{
     CancelClose();
     return;
}

if (CurrentStatus == Status.Saving) 
{
  //     IsChanged = false;
}

答案 6 :(得分:1)

    if(!IsChanged) {
        if (Status == "saving") // saving logic falls to here...
        {
            //     IsChanged = false;
        } 
        else if (Status == "") // Executed when the close (x) button is pressed, as the Status string is not yet set to a real value...
        {
            CancelClose();
        }
    } else {
        return;
    }

答案 7 :(得分:0)

可以简化为

    if (IsChanged)
    {
        return;
    }

    else if (Status == "") // Executed when the close (x) button is pressed, as the Status string is not yet set to a real value...
    {
        CancelClose();
    }

    else if (Status == "saving") // saving logic falls to here...
    {
        //     IsChanged = false;
    }

第一次检查时不需要== True,因为它已经是真或假。

,你不需要在其他选择中检查错误,因为如果不是这样,那么它就是假的。

答案 8 :(得分:0)

if (IsChanged) return;

if (Status == "saving")
{
  //IsChanged = false;
}
else if (Status = "")
{
  CancelClose();
}

我会避免用大写字母开始你的变量名。

答案 9 :(得分:0)

if (IsChanged) 
   return;

if (String.IsNullOrEmpty(Status)) // better use this unless you would like a
   CancelClose();                 // nullPointerException

else if (Status.equals("Saving"))
   // whatever you want for save

答案 10 :(得分:0)

我不熟悉c#,但是it supports the conditional operator

condition ? first_expression : second_expression;

由于我不熟悉c#,我不会尝试重新编写代码,但无论如何,三元运算符可以在某些地方带来令人满意的简洁。