2012-07-26 80 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提示。

希望這有助於...