为了让c#中最不常用的语法之一看起来更好或工作得更好,似乎已经做了大量的工作。我个人认为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();
}
}
也许你想看看字符串中的一个字符是否是十六进制的。您可以使用一个ungly和有点大的switch语句。
或者你可以使用正则表达式来测试字符,或者使用IndexOf函数在已知的十六进制字母字符串中搜索字符:
private void textBox2_TextChanged(object sender, EventArgs e) {
try {
textBox1.Text = ("0123456789ABCDEFGabcdefg".IndexOf(textBox2.Text[0]) >= 0).ToString();
} catch {
}
}
Let us say you want to do one of 3 different actions depending on a value that will be the range of 1 to 24. I would suggest using a set of IF statements. And if that became too complex (Or the numbers were larger such as 5 different actions depending on a value in the range of 1 to 90) then use an enum to define the actions and create an array map of the enums. The value would then be used to index into the array map and get the enum of the action you want. Then use either a small set of IF statements or a very simple switch statement to process the resulting enum value.
此外,将一系列值转换为操作的数组映射的好处是可以通过代码轻松更改它。使用硬连线代码,你不能轻易地在运行时改变行为,但使用数组映射则很容易。