Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否在VB.NET中的IF条件中执行赋值?_.net_Vb.net_If Statement_Assignment Operator - Fatal编程技术网

是否在VB.NET中的IF条件中执行赋值?

是否在VB.NET中的IF条件中执行赋值?,.net,vb.net,if-statement,assignment-operator,.net,Vb.net,If Statement,Assignment Operator,有没有办法在VB.NET中的IF语句中设置变量。我想做以下工作: 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

有没有办法在VB.NET中的IF语句中设置变量。我想做以下工作:

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”开始工作?我知道我可以重新编写它以使其正常工作,但是否有一些语法可以使其正常工作?

否,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
我不使用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

我知道这会调用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

(在人们大吵大闹之前:如果
tabPageFound
没有事先初始化或事后分配,这在C语言中是完全有效的方法。)从经常不得不支持他人代码的人的角度来看,我强烈建议不要在任何语言中这样做。条件语句应该检查状态,而不是改变状态。大卫,你有什么建议吗?现在。。。那太可怕了。虽然我有时在C#中使用“相当于post”,但我坚决反对这种方法。很难看到发生了什么,尤其是在调用站点上没有必要的注释(这与C#不同)。也就是说,它在技术上是正确的,所以+1。哦,我完全同意,我永远不会把它作为生产代码来写。但是,这是获得OP所需行为的唯一方法。