0

我有这样的 if 语句:

If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then

我想知道有这么多AndAlso的是不是很糟糕。它确实有效,只是弄不清楚发生了什么令人困惑。有没有一种更简单的方法来做这个测试?还是这是正确的做事方式?

4

3 回答 3

2

据我所知,MSDN 文档没有说明可以在If语句中使用的最大条件数——因此任何限制都可能受可用堆栈空间的约束,而且你几乎不可能接近那个。

至于实践:编码术语还不错,但正如您所说,它可能变得难以阅读。我个人倾向于只使用续行来使此类语句更具可读性:

If r1.Left < r2.Right _
    AndAlso r2.Right < r1.Right _
    AndAlso r2.Top + r2.Height > r1.Top Then
于 2012-07-26T11:30:37.170 回答
1

你总是可以引入一个新的变量或方法来提高可读性。

所以而不是

If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then

就像是

Function RectIsInsideOf(r1 As ..., r2 As ...) As Bool
    Return r1.Left < r2.Right AndAlso 
           r2.Right < r1.Right AndAlso 
           r2.Top + r2.Height > r1.Top 
End Function

...

If RectIsInsideOf(r1, r2) Then ...
于 2012-07-26T11:19:28.380 回答
0

好吧,您对可以在 if 语句中使用多少个运算符没有任何限制。此外,使用任意数量的代码(从程序员的角度来看)是完全可以的,毕竟这就是 if 语句的意义所在。但是,如果您面临需要检查太多运算符的情况,那么您必须考虑另一种方法。

在您的具体示例中,您使用的代码仅包含两个 AndAlso 运算符,这对您的程序来说开销不大。如果您只想在程序中的一个位置检查这种情况,那么您的方法可以被认为是正确的,如果您需要在许多位置进行这种检查,那么为此编写一个 BigYellowCactus 函数是明智的建议。

希望这可以帮助...

于 2012-07-26T11:58:41.363 回答