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
{

}

enumステータスを表すにはを使用することをお勧めします。これにより、コードを厳密に型指定できます。

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 の場合に返すため、他の ifs では必要ありません。

    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 が true の場合、「else」には到達しません。
  • IsChanged==false は常に true であるため、他の ifs から削除してください。
  • ステータスの文字列ではなく列挙型を考えてください。

私はお勧めします:

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

に簡略化できます

    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 になっているためです。true でない場合は false でなければならないため、他の選択肢で 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 に答える
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

私はC#に精通していませんが、条件演算子をサポートしています

condition ? first_expression : second_expression;

私は c# に詳しくないので、あなたのコードを書き直すつもりはありませんが、いずれにせよ、三項演算子はいくつかの場所で快適な簡潔さにつながる可能性があります。

于 2010-08-24T17:29:13.153 に答える