2012-03-19 70 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