2

myStringがこれらの値A、B、C、またはDのいずれかを持っているときに、次のコードを実行したいと思います。現在、これらの4つの値があることはわかっていますが、近い将来、このセットにさらに多くの値を含めることができます。私のコード:

var result = MyBlRepository.MyBLMethod(myString);

n個のifelseループを作成する簡単な方法ですが、値が増えると大きくなる可能性があります。これを処理するための最良の方法は何ですか?どのデザインパターンがそれに最適である必要がありますか?

編集:ここにフィルターを保持したくありません。このファイルのコードを変更したくありません。

4

4 に答える 4

2

myString定数値のセットの1つがあるかどうかを確認するだけの場合は、次を使用できswitchます。

bool result;
switch (myString) {
    case "A":
    case "B":
    case "C":
    case "D":
        result = true;
        break;
    default:
        result = false;
        break;
}

これは、このコードの特に長いバージョンであることに注意してください。

  • 比較の結果に基づいて値を返したい場合は、return true;/を記述return false;して行を省略できますbreak;
  • 値を確認し、目的の値のセットに含まれていない場合に例外をスローする場合(この場合はタイプの方が適切な場合があります)、変数enumは必要なく、ケースで例外をスローするだけです(およびデフォルトの場合はもう必要ありません)。resultdefaultbreak;

それ以外の場合(コンパイル時に値のいずれかがまだ決定されていない場合)、List<string>/を使用して他の回答で説明されている方法で実行しHashSet<string>ます。

于 2012-06-15T09:33:18.437 に答える
1
var list = new List<string>
{
  "A", 
  "B", 
  "C",
  "D"
 };
 bool exists = list.Contains(myString);
于 2012-06-15T09:29:33.557 に答える
1

ここで説明するように、戦略パターンが必要です

これにより、複数のifステートメントを適切に処理できます。上記のリンクに複数のifステートメントを処理する方法を示す短くて簡単なチュートリアルがあります。

お役に立てれば。

于 2012-06-15T10:40:24.957 に答える
0

私のセグメントはRegex、外部構成ファイルで使用することです。app.cofingまたはを使用できます。custom xml file

このような可能な値をプログラムに保存expression = "^(A|B|C|D)$" します。

var expression = ReadFromConfigFile(); 
var regex = new Regex(expression);
if(regex.IsMatch(myString))
 // do work
于 2012-06-15T10:17:29.810 に答える