ada*_*101 3 .net c# language-agnostic vb.net asp.net
我有一个网页,需要有选择地显示或隐藏大量的控件.每个控件的可见性是根据3个条件中的哪一个确定的.
因此,例如,给定条件A,B和C;
如果每个控件都查看了每个条件,那么控制逻辑将是丑陋的,但可行.
If A Then
If B Then
If C Then
Else
End If
Else
If C Then
Else
End If
End If
Else
If B Then
If C Then
Else
End If
Else
If C Then
Else
End If
End If
End If
Run Code Online (Sandbox Code Playgroud)
但不幸的是,当你混合使用许多控件只关心3个条件中的1个或2个时,代码开始变成维护噩梦.以下是所有26种可能的条件:
A False B Any C Any
A True B Any C Any
A Any B Any C False
A False B Any C False
A True B Any C False
A Any B Any C True
A False B Any C True
A True B Any C True
A Any B False C Any
A False B False C Any
A True B False C Any
A Any B False C False
A False B False C False
A True B False C False
A Any B False C True
A False B False C True
A True B False C True
A Any B True C Any
A False B True C Any
A True B True C Any
A Any B True C False
A False B True C False
A True B True C False
A Any B True C True
A False B True C True
A True B True C True
Run Code Online (Sandbox Code Playgroud)
是否有更好的模式来处理多个条件的检查?
编辑: 我已经开始沿着Marcelo Cantos建议的道路前进,但我的A,B和C条件很长.所以我做了一个帮手功能:
Dim isMatch = Function(A As Boolean?, B As Boolean?, C As Boolean?) As Boolean
Return (Not A.HasValue OrElse A.Value = SomeLongConditionA) _
AndAlso (Not B.HasValue OrElse B.Value = SomeLongConditionB) _
AndAlso (Not C.HasValue OrElse C.Value = SomeLongConditionC)
End Function
Control1.Visible = isMatch(True, True, False)
Control2.Visible = isMatch(False, True, True)
Control3.Visible = isMatch(True, Nothing, True)
Run Code Online (Sandbox Code Playgroud)
Mar*_*tos 15
Control1.Visible = A And B And Not C
Control2.Visible = Not A And B And C
Control3.Visible = A And C
...
Run Code Online (Sandbox Code Playgroud)
请注意,此表单类似于您提供的规则的说明.这是思考大多数问题的好方法:"我怎样才能使代码看起来像我对问题的描述?"
编辑:如果A,B和C表示冗长的表达式,则不必将这些表达式复制粘贴到每一行,也不必编写辅助函数.只需预先计算值:
Dim A As Boolean = SomeLongConditionA
Dim B As Boolean = SomeLongConditionB
Dim C As Boolean = SomeLongConditionC
Control1.Visible = A And B And Not C
...
Run Code Online (Sandbox Code Playgroud)
另请注意,这将比辅助函数快得多,这可以节省打字,但仍会多次评估条件.
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |