1

リファクタリングできない if-else ステートメントがあります。asp.netを使用してサーバー側で検証を行うためにそれらを使用しました。

これらのステートメントを減らす方法を誰か提案してください。ここで、検証フィールドと検証タイプはenumリストです。

else if (CheckNextItem(ddlBr1Type.SelectedValue.ToString(), ddlBr2Type.SelectedValue.ToString(), ValidationFields.FO.ToString(), ValidationTypes.P.ToString()))
{
   BrkTypeValidator2.ErrorMessage = "'TOP0618 -Invalid combination of Bracket IDs'";
   args.IsValid = false;
}
else if (CheckNextItem(ddlBr1Type.SelectedValue.ToString(), ddlBr2Type.SelectedValue.ToString(), ValidationFields.FW.ToString(), ValidationTypes.P.ToString()))
{
   BrkTypeValidator2.ErrorMessage = "'TOP0618 -Invalid combination of Bracket IDs'";
   args.IsValid = false;
}
else if (CheckNextItem(ddlBr1Type.SelectedValue.ToString(), ddlBr2Type.SelectedValue.ToString(), ValidationFields.UF.ToString(), ValidationTypes.P.ToString()))
{
     BrkTypeValidator2.ErrorMessage = "'TOP0618 -Invalid combination of Bracket IDs'";
     args.IsValid = false;
}
else if (CheckNextItem(ddlBr1Type.SelectedValue.ToString(), ddlBr2Type.SelectedValue.ToString(), ValidationTypes.O.ToString(), ValidationTypes.P.ToString()))
{
      BrkTypeValidator2.ErrorMessage = "'TOP0618 -Invalid combination of Bracket IDs'";
      args.IsValid = false;
}
else if (CheckNextItem(ddlBr1Type.SelectedValue.ToString(), ddlBr2Type.SelectedValue.ToString(), ValidationTypes.W.ToString(), ValidationTypes.P.ToString()))
{
      BrkTypeValidator2.ErrorMessage = "'TOP0618 -Invalid combination of Bracket IDs'";
      args.IsValid = false;

}
else if (CheckNextItem(ddlBr1Type.SelectedValue.ToString(), ddlBr2Type.SelectedValue.ToString(), ValidationTypes.P.ToString(), ValidationTypes.C.ToString()))
{
      BrkTypeValidator2.ErrorMessage = "'TOP0618 -Invalid combination of Bracket IDs'";
      args.IsValid = false;

}
else if (CheckNextItem(ddlBr1Type.SelectedValue.ToString(), ddlBr2Type.SelectedValue.ToString(), ValidationTypes.C.ToString(), ValidationTypes.U.ToString()))
{
      BrkTypeValidator2.ErrorMessage = "'TOP0618 -Invalid combination of Bracket IDs'";
      args.IsValid = false;

}

これは次の方法ですChecknextitem

 public static bool CheckNextItem(string Compareitem1, string comnpareitem2, string items1, string items2)
  {

        var listContains = Compareitem1 == items1 && comnpareitem2 != items2;
        return listContains;

  }

このコードを使用する場合

 var invalidComparisons = new ValidationTypes[][] {
                      new[] { ValidationFields.FO, ValidationTypes.P },
                      new[] { ValidationFields.FW, ValidationTypes.P },
                      new[] { ValidationFields.UF, ValidationTypes.O },
                      new[] { ValidationTypes.O, ValidationTypes.P },
                      new[] { ValidationTypes.W, ValidationTypes.P },
                      new[] { ValidationTypes.P, ValidationTypes.C },
                      new[] { ValidationTypes.C, ValidationTypes.U },
                   };

コンパイル時エラーが発生しています: 「暗黙的に型指定された配列に最適な型が見つかりません」 .

4

1 に答える 1

5

リスト/配列を使用して、比較する検証タイプを保存します。

var invalidComparisons = new string[][] {
        new[] { ValidationFields.FO.ToString(), ValidationTypes.P.ToString() },
        new[] { ValidationFields.FW.ToString(), ValidationTypes.P.ToString() },
        new[] { ValidationFields.UF.ToString(), ValidationTypes.O.ToString() },
        new[] { ValidationTypes.O.ToString(), ValidationTypes.P.ToString() },
        new[] { ValidationTypes.W.ToString(), ValidationTypes.P.ToString() },
        new[] { ValidationTypes.P.ToString(), ValidationTypes.C.ToString() },
        new[] { ValidationTypes.C.ToString(), ValidationTypes.U.ToString() },
};

if (invalidComparisons.Any(x => CheckNextItem(ddlBr1Type.SelectedValue.ToString(), ddlBr2Type.SelectedValue.ToString(), x[0], x[1]))
{
    BrkTypeValidator2.ErrorMessage = "'TOP0618 -Invalid combination of Bracket IDs'";
    args.IsValid = false;
}
于 2013-07-23T03:45:24.230 に答える