gpt4 book ai didi

c# - 处理嵌套代码条件的更好模式?

转载 作者:行者123 更新时间:2023-11-30 13:15:50 26 4
gpt4 key购买 nike

我有一个网页需要有选择地显示或隐藏大量控件。每个控件的可见性取决于 3 个条件中的哪一个为真。

所以,例如,给定条件A、B、C;

  • 仅当 A 和 B 为真且 C 为假时,Control1 才需要可见。
  • 仅当 B 和 C 为真且 A 为假时,Control2 才需要可见。
  • Control3 需要仅在 A 和 C 为真时才可见,它不关心 B 是什么。
  • 等等...

如果每个控件都查看每个条件,则控制逻辑会很丑陋,但可行。

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

但不幸的是,当您考虑到许多控件只关心 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

是否有更好的模式来处理多个条件的检查?

编辑:我已经开始沿着 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)

最佳答案

Control1.Visible = A And B And Not C
Control2.Visible = Not A And B And C
Control3.Visible = A And C
...

请注意,此表单类似于您提供的规则说明。这是思考大多数问题的好方法:“我怎样才能使代码看起来像我对问题的描述?”

编辑:如果 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
...

另请注意,这将比辅助函数快得多,辅助函数可以节省键入时间,但仍会多次评估条件。

关于c# - 处理嵌套代码条件的更好模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com