C#で最も使用頻度の低い構文の1つを何とかして見栄えを良くしたり、うまく機能させたりする方法を見つけるために、非常に多くの作業が行われているようです。個人的には、switchステートメントを使用する価値はほとんどありません。テストしているデータと必要な最終結果を分析することを強くお勧めします。
たとえば、既知の範囲の値をすばやくテストして、それらが素数であるかどうかを確認するとします。あなたのコードが無駄な計算をすることを避けたいし、あなたがオンラインで欲しい範囲の素数のリストを見つけることができます。大規模なswitchステートメントを使用して、各値を既知の素数と比較できます。
または、素数の配列マップを作成して、すぐに結果を得ることができます。
bool[] Primes = new bool[] {
false, false, true, true, false, true, false,
true, false, false, false, true, false, true,
false,false,false,true,false,true,false};
private void button1_Click(object sender, EventArgs e) {
int Value = Convert.ToInt32(textBox1.Text);
if ((Value >= 0) && (Value < Primes.Length)) {
bool IsPrime = Primes[Value];
textBox2.Text = IsPrime.ToString();
}
}
文字列内の文字が16進数かどうかを確認したい場合があります。見苦しくてやや大きいswitchステートメントを使用できます。
または、正規表現を使用して文字をテストするか、IndexOf関数を使用して、既知の16進文字の文字列で文字を検索します。
private void textBox2_TextChanged(object sender, EventArgs e) {
try {
textBox1.Text = ("0123456789ABCDEFGabcdefg".IndexOf(textBox2.Text[0]) >= 0).ToString();
} catch {
}
}
1から24の範囲の値に応じて、3つの異なるアクションのいずれかを実行するとします。IFステートメントのセットを使用することをお勧めします。そして、それが複雑になりすぎた場合(または、1から90の範囲の値に応じて5つの異なるアクションのように数値が大きくなった場合)、列挙型を使用してアクションを定義し、列挙型の配列マップを作成します。次に、その値を使用して配列マップにインデックスを付け、必要なアクションの列挙を取得します。次に、IFステートメントの小さなセットまたは非常に単純なswitchステートメントを使用して、結果の列挙値を処理します。
また、値の範囲をアクションに変換する配列マップの良い点は、コードによって簡単に変更できることです。ハードワイヤードコードでは、実行時に動作を簡単に変更することはできませんが、配列マップを使用すると簡単です。