2012-03-19 67 views
2

有沒有在IF語句中設置VB.NET中的變量的方法。我想做以下事情:在VB.NET條件下執行賦值?

If (TypeOf sender Is TabControl And TypeOf e.Control Is TabPage) Then 'tab control is adding a tab page 
    AddControl(CType(e.Control, TabPage)) 
ElseIf (TypeOf sender Is TabPage) Then         'tab page is adding some control 
    AddControl(CType(sender, TabPage), e.Control) 
ElseIf (tabPageFound = FindTabPageOf(sender)) IsNot Nothing Then 
    tabPageFound.SomeAction() 
End if 

有沒有什麼辦法可以讓最後的「ElseIf」工作?我知道我可以重新編寫它來實現它的功能,但是有沒有一些語法可以使它按照它的方式工作?

+0

(人扔太多hullaballoo之前:這是,如果*'tabPageFound'事先不初始化或分配後的C#*非常有效的方法) – 2012-03-19 19:15:37

+1

從別人的角度來看誰往往不得不支持其他人的代碼,我強烈建議不要以任何語言進行此操作。條件語句應該檢查狀態,而不是改變狀態。 – David 2012-03-19 19:15:42

+0

你會建議大衛? – BentOnCoding 2012-03-19 19:19:53

回答

3

我不使用VB.NET(所以介意語法錯誤)。但是,請注意,每個「其他if」都可以簡單地重寫爲帶有嵌套「if」的「else」。許多語言(如基於C語法的語言)沒有複合「else if」語句,但對「掛起if」語句有更好的支持。

在這種情況下,它可能會被改寫爲:

If (TypeOf sender Is TabControl And TypeOf e.Control Is TabPage) Then 
    ... 
ElseIf (TypeOf sender Is TabPage) Then 
    ... 
Else 
    tabPageFound = FindTabPageOf(sender) 
    If (tabPageFound) IsNot Nothing Then 
     ... 
    End 
End If 

只是要考慮的問題。


爲了完整起見,這表明除去所有ElseIf使用,並且得到的嵌套:

If (TypeOf sender Is TabControl And TypeOf e.Control Is TabPage) Then 
    ... 
Else 
    If (TypeOf sender Is TabPage) Then 
     ... 
    Else 
     tabPageFound = FindTabPageOf(sender) 
     If (tabPageFound) IsNot Nothing Then 
      ... 
     End If 
    End If 
End If 
3

不,Visual Basic不支持該語法。

您唯一的選擇是將變量byref傳遞給一個方法,該方法將分配它並返回相應的值。

例如:

Function DoFindTabPageOf(ByRef tabPageFound As Control, sender As Object) As Control 
    tabPageFound = FindTabPageOf(sender) 
    Return tabPageFound 
End Function 

那麼你elseif的變成:

ElseIf (DoFindTabPageOf(tabPageFound, sender) IsNot Nothing Then 
+2

現在......這只是可怕的。雖然我有時在C#中使用「相當於帖子」,但我會拒絕這種方法*。很難看到發生了什麼,特別是在呼叫站點沒有必要的註釋(與C#不同)。這就是說,這是技術上的正確,所以+1。 – 2012-03-19 19:17:46

+0

哦,我完全同意,我永遠不會把它寫成生產代碼。但是,這是獲得OP期望行爲的唯一方法。 – 2012-03-19 19:20:22

1

我知道這調用FindTabPageOf的兩倍,但可以按以下步驟進行。如果你想在某處使用tabPageFound,它會變得更加有害。

If (TypeOf sender Is TabControl And TypeOf e.Control Is TabPage) Then 'tab control is adding a tab page 
    AddControl(CType(e.Control, TabPage)) 
ElseIf (TypeOf sender Is TabPage) Then         'tab page is adding some control 
    AddControl(CType(sender, TabPage), e.Control) 
ElseIf (FindTabPageOf(sender) IsNot Nothing) Then 
    FindTabPageOf(sender).SomeAction() 
End if