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