C#中switch的default分支能否放中间/开头?是否兼容所有版本?
在C#中把switch的default分支放在中间(和case 2合并)是否安全且兼容所有版本?
这种写法完全安全,而且兼容所有C#版本——从C# 1.0发布开始,switch语句的default分支就允许放在任意位置,这是C#语言规范明确规定的内容。
逻辑说明
switch的执行逻辑是:先逐一匹配case分支,找到匹配项就跳转到对应位置执行;如果没有任何case匹配,就会跳转到default分支的位置执行。当你把default和case 2放在一起且中间没有break时,不管是default:在前还是case 2:在前,只要没有匹配到case 1或case 3,都会执行这段共用代码,逻辑上完全等价。
验证代码(你提供的测试用例)
[TestMethod] public void SwitchMethodWithDefaultsInMiddle() { Func<int, string> func = (n) => { string ret = ""; switch (n) { case 1: // code for case 1 here... ret = "case 1"; break; default: case 2: // code here is for default and case 2 ret = "case 2 or default"; break; case 3: // code for case 3 here... ret = "case 3"; break; } return ret; }; Assert.AreEqual("case 1", func(1)); Assert.AreEqual("case 2 or default", func(2)); Assert.AreEqual("case 3", func(3)); Assert.AreEqual("case 2 or default", func(0)); Assert.AreEqual("case 2 or default", func(4)); }
这段测试代码已经验证了这种写法的正确性:无论是匹配case 2,还是触发默认分支,都会返回预期的结果。
团队规范建议
虽然语法上完全没问题,但作为团队规范推行时,最好确保所有成员都理解这种写法的逻辑,避免后续维护时出现误解。可以在代码中保留清晰的注释,明确说明这段分支同时处理case 2和默认情况。
内容的提问来源于stack exchange,提问作者KargWare
相关产品推荐
相关产品推荐

