非常に多くの作業が、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ステートメントを使用できます。
または、正規表現を使用してcharをテストするか、IndexOf関数を使用して既知の16進文字の文字列でcharを検索することができます。
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ステートメントのいずれかを使用して、結果の列挙値を処理します。
また、値の範囲をアクションに変換する配列マップの良いところは、コードで簡単に変更できることです。ハードワイヤードコードを使用すると、実行時に動作を簡単に変更することはできませんが、配列マップを使用すると簡単に変更できます。