我有这样的if语句:
If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then
我想知道这么多AndAlso
是不是很糟糕。它确实有用,只是弄清楚弄清楚发生了什么。有没有办法以更简单的方式进行此测试?或者这是正确的做事方式吗?
答案 0 :(得分:2)
据我所知,MSDN文档没有说明可以在If
语句中使用的最大条件数 - 因此任何限制都可能受可用堆栈空间的限制而且非常不可能你会得到任何接近的地方。
至于练习:它在编码方面并不坏,但正如你所说,它可能变得难以阅读。我个人倾向于使用行延续来使这些语句更具可读性:
If r1.Left < r2.Right _
AndAlso r2.Right < r1.Right _
AndAlso r2.Top + r2.Height > r1.Top Then
答案 1 :(得分: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 ...
答案 2 :(得分:0)
您对if语句中可以使用的运算符数没有任何限制。此外,(通过程序员的观点)可以尽可能多地使用,毕竟,这就是if语句的内容。但是,如果您面临需要检查太多操作员的情况,那么您必须考虑采用不同的方法。
在您的特定示例中,您使用的代码仅包含两个AndAlso运算符,这对您的程序来说不是很大的开销。如果你要在你的程序中的一个位置检查这个条件,那么你的方法可以被认为是正确的,如果你需要在许多地方进行这种检查,那么为BigYellowCactus写一个函数是明智的。建议。
希望这会有所帮助......