VB.Net中Select/Case语句如何在非Else分支统一执行公共代码
解决VB.Net Select/Case重复代码的几种方案
嘿,这个问题我刚好有几个实用的思路,帮你摆脱重复写numColumns = numColumns + 1的麻烦!
方案一:先处理通用递增,再基于原始值分支
这应该是最简洁易读的方式——先把所有非Case Else分支的通用逻辑抽出来,再用原始值去判断执行不同代码:
' 先保存原始值,避免递增后影响分支判断 Dim originalNumColumns As Integer = numColumns ' 只在需要的分支里执行递增 If originalNumColumns >= 0 AndAlso originalNumColumns <= 2 Then numColumns += 1 ' 这里用+=和numColumns = numColumns +1效果一样,更简洁 End If ' 基于原始值执行不同分支的代码 Select Case originalNumColumns Case 0 ' Some code Case 1 ' Some different code Case 2 ' Some even more different code Case Else ' Do Nothing End Select
这个方案完全避免了重复代码,逻辑也一目了然,不会让后续维护的人困惑。
方案二:用组合Case统一处理通用逻辑
如果你更倾向于把逻辑都放在Select Case里,可以用多值Case把0、1、2合并,先执行通用递增,再嵌套一个小的Select处理分支差异:
Select Case numColumns Case 0, 1, 2 ' 或者用Case 0 To 2,因为是连续值 numColumns += 1 ' 基于原来的numColumns值执行不同代码,这里要减1因为已经递增过了 Select Case numColumns - 1 Case 0 ' Some code Case 1 ' Some different code Case 2 ' Some even more different code End Select Case Else ' Do Nothing End Select
不过嵌套Select会稍微增加一点复杂度,如果你分支逻辑比较简单,这个方案也能用。
关于你提到的「Case All」
VB.Net里并没有直接的Case All语法,但我们可以用Case 0,1,2或者Case 0 To 2(当值连续时)来模拟“所有需要处理的分支”,把通用逻辑放在这个组合Case里,就能达到类似的效果啦。
内容的提问来源于stack exchange,提问作者Skitzafreak
相关产品推荐
相关产品推荐

