2

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

if (IsChanged == true)
{
    return;
}

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

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

谢谢

4

11 回答 11

20
if (isChanged) return;

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

这几乎是整洁的。请注意,因为如果 isChanged 为 true 则返回,因此您可以进一步假设 isChanged 为 false。

于 2010-08-24T16:27:59.610 回答
12

这有点干净:

if (IsChanged)
{

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

}
else if (Status == "")
{

}
else
{

}

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

public enum Status
{
    Closing,
    Saving,
    Changed,
}

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

switch (_status)
{
    case Status.Saving:
        break;
    case Status.Closing:
        break;
    case Status.Changed:
        break;
    default:
        break;
}
于 2010-08-24T16:27:43.220 回答
4
if(IsChanged)
  return;

if(Status == "saving")
{
    // save      
}
else if(string.IsNullOrEmpty(Status))
{
    CancelClose();    
}
于 2010-08-24T16:28:23.963 回答
2

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

    if (IsChanged == true)
        return;

    switch (Status)
    { 
       case "":
        CancelClose();
        break;
       case "saving":
        break;
    }
于 2010-08-24T16:28:34.517 回答
1

是的:

   if (IsChanged) return;
   if (String.IsNullOrEmpty(Status)) CancelClose();
于 2010-08-24T16:28:10.707 回答
1
  • 将第一个 else if 剪切为 just if。如果 IsChanged 为真,则永远不会到达“else”。
  • 从您的其他 if 中删除 IsChanged==false,因为它们始终为真。
  • 为您的状态考虑枚举而不是字符串。

我建议:

if (IsChanged)
{
      return;
}

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

if (CurrentStatus == Status.Saving) 
{
  //     IsChanged = false;
}
于 2010-08-24T16:30:10.670 回答
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;
    }
于 2010-08-24T16:30:24.163 回答
0

我不熟悉c#,但它支持条件运算符

condition ? first_expression : second_expression;

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

于 2010-08-24T17:29:13.153 回答
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
于 2010-08-24T16:37:39.450 回答
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 在第一次检查中,因为它已经是 true 或 false。您不需要在其他选项中检查是否为假,因为如果它不是真的,它一定是假的。

于 2010-08-24T16:28:24.027 回答
0
if (IsChanged) return;

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

我会避免以大写字母开头你的变量名。

于 2010-08-24T16:28:50.500 回答