在VB.NET中以IF条件执行赋值?

时间:2012-03-19 19:12:17

标签: .net vb.net if-statement assignment-operator

有没有办法在IF语句中设置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”工作吗?我知道我可以重新编写它以使其工作但是有一些语法可以使它按原样运行吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

我不使用VB.NET(所以请注意语法错误)。但是,请注意,每个“else 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

答案 2 :(得分: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