2012-07-26 58 views
0

我有一个if语句是这样的:VB if语句:你有多少和公司可以有

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

我想知道如果它是坏的,有这么多AndAlso的。它确实起作用,只是弄清楚发生了什么。有没有一种以更简单的方式进行这项测试的方法?或者这是做事的正确方式?

+0

你知道的['Rectangle.Contains'方法(http://msdn.microsoft.com/en-us/library/0kh3ee9e.aspx),对不对?但更一般的说,如果图书馆没有提供完成你想要的测试的方法,你可以自己写。 – 2012-07-26 11:20:44

回答

2

据我所知,MSDN文档不说有关可在一个If使用条件的最大数目什么声明 - 所以任何限制都可能受可用堆栈空间的支配,而且很可能你会得到任何附近的地方。

至于做法:它不是在编码方面不好,但它可以如你所说,变得难以阅读。我个人倾向于使用连续行使这些语句更具可读性:

If r1.Left < r2.Right _ 
    AndAlso r2.Right < r1.Right _ 
    AndAlso r2.Top + r2.Height > r1.Top Then 
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 ... 
0

那么您对if语句中可以使用多少个操作符没有任何限制。此外,根据程序员的观点,它是完全正确的(尽可能多地使用),毕竟,如果陈述是关于这一点的话。但是,如果您遇到需要检查太多操作员的情况,那么您必须考虑采用不同的方法。

在您的具体示例中,您使用的代码仅包含两个AndAlso运算符,这对您的程序来说不是很大的开销。如果你打算只在一个位置,在你的程序,然后你的方法可以被认为是正确的,以检查此条件,如果你将需要在许多地方,这种检查则是明智的,写一个函数,该函数为BigYellowCactus提示。

希望这有助于...