是否在VB.NET中的IF条件中执行赋值?
有没有办法在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
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所需行为的唯一方法。