简化“如果”声明

时间:2014-12-26 15:49:40

标签: vb.net if-statement case selection

我有一个相当大的If声明。

If Node1.IsSelected Then
    CrumbBar1.SelectedItem = HomeNode
    ' Main week views
ElseIf Node2.IsSelected Then
    CrumbBar1.SelectedItem = wk1
ElseIf Node3.IsSelected Then
    CrumbBar1.SelectedItem = wk2
ElseIf Node4.IsSelected Then
    CrumbBar1.SelectedItem = wk3
ElseIf Node5.IsSelected Then
    CrumbBar1.SelectedItem = wk4
    ' Week 1
ElseIf Node6.IsSelected Then
    CrumbBar1.SelectedItem = mon1
ElseIf Node7.IsSelected Then
    CrumbBar1.SelectedItem = tue1
ElseIf Node8.IsSelected Then
    CrumbBar1.SelectedItem = wed1
ElseIf Node9.IsSelected Then
    CrumbBar1.SelectedItem = thu1
ElseIf Node10.IsSelected Then
    CrumbBar1.SelectedItem = fri1
    ' Week 2
ElseIf Node11.IsSelected Then
    CrumbBar1.SelectedItem = mon2
ElseIf Node12.IsSelected Then
    CrumbBar1.SelectedItem = tue2
ElseIf Node13.IsSelected Then
    CrumbBar1.SelectedItem = wed2
ElseIf Node14.IsSelected Then
    CrumbBar1.SelectedItem = thu2
ElseIf Node15.IsSelected Then
    CrumbBar1.SelectedItem = fri2
    ' Week 3
ElseIf Node16.IsSelected Then
    CrumbBar1.SelectedItem = mon3
ElseIf Node17.IsSelected Then
    CrumbBar1.SelectedItem = tue3
ElseIf Node18.IsSelected Then
    CrumbBar1.SelectedItem = wed3
ElseIf Node19.IsSelected Then
    CrumbBar1.SelectedItem = thu3
ElseIf Node20.IsSelected Then
    CrumbBar1.SelectedItem = fri3
    ' Week 4
ElseIf Node21.IsSelected Then
    CrumbBar1.SelectedItem = mon2
ElseIf Node22.IsSelected Then
    CrumbBar1.SelectedItem = tue2
ElseIf Node23.IsSelected Then
    CrumbBar1.SelectedItem = wed2
ElseIf Node24.IsSelected Then
    CrumbBar1.SelectedItem = thu2
ElseIf Node25.IsSelected Then
    CrumbBar1.SelectedItem = fri2
Else
    CrumbBar1.SelectedItem = HomeNode
End If

我知道Select Case语句,但这个If语句是否可以使用一个简化?

我在大学期间使用Delphi教学,案例选择仅适用于单个字符和整数。所有/大多数语言都是一样的吗?

为了让人放心我会将所有节点和CrumbBar1重命名为更有意义的东西,它们只是临时名称。

节点是TreeView控件的一部分,CrumbBar是一个类似于Windows资源管理器中的组件,因为它是地址栏。

1 个答案:

答案 0 :(得分:2)

If语句过长或过于复杂,对于重新审核您是如何解决问题的code smell都很好。

有很多方法可以重构,我必须看到更多的原始代码才能真正理解你在这里做了什么。 (什么是mon1mon2 - 对象?字符串?)

考虑将您放入Crumbar1.SelectedItem的所有项目存储到数组中。然后,您可以执行CrumbBar.SelectedItem = items[x]之类的操作,其中 x 是TreeView中所选项目的索引。 (或者,在TreeView OnSelectedItem事件中执行所有这些操作。)

如果您发布了更多代码或有关您要解决的问题的更多详细信息,我们很乐意使用更完整的代码解决方案更新我的答案。