似乎已经投入了大量的工作来寻找使 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();
}
}
也许您想查看字符串中的字符是否为十六进制。你可以使用一个笨拙且有点大的 switch 语句。
或者您可以使用正则表达式来测试 char 或使用 IndexOf 函数在已知的十六进制字母字符串中搜索 char:
private void textBox2_TextChanged(object sender, EventArgs e) {
try {
textBox1.Text = ("0123456789ABCDEFGabcdefg".IndexOf(textBox2.Text[0]) >= 0).ToString();
} catch {
}
}
假设您要根据 1 到 24 范围内的值执行 3 种不同操作中的一种。我建议使用一组 IF 语句。如果这变得太复杂(或者数字更大,例如 5 个不同的操作,具体取决于 1 到 90 范围内的值),则使用枚举来定义操作并创建枚举的数组映射。然后该值将用于索引数组映射并获取所需操作的枚举。然后使用一小组 IF 语句或一个非常简单的 switch 语句来处理生成的枚举值。
此外,将一系列值转换为操作的数组映射的好处在于它可以通过代码轻松更改。使用硬连线代码,您无法在运行时轻松更改行为,但使用数组映射很容易。