首页 > 解决方案 > 使用参数时为原始布尔值赋值

问题描述

在将其传递给另一个方法后,我试图传递一个布尔值并为其分配一个值(真/假)

我希望它与多个布尔值一起使用,例如:

'My.Settings.boolean1 = False
'My.Settings.boolean2 = True

Private Sub Button1_Click() Handles Button1.Click
    DoSomething(My.Settings.boolean1)
End Sub
Private Sub Button2_Click() Handles Button2.Click
    DoSomething(My.Settings.boolean2)
End Sub

Public Shared Sub DoSomething(aBoolean As Boolean) 'BooleanName As String
   if aBoolean then 
        aBoolean = False '(Sets locally not the main boolean)
        'etc...
   Else
        aBoolean = True
        'etc...
   End If
End Sub 

它将值分配给 aBoolean 并且实际上并没有触及原始布尔值,即目标

(显然它不是那样工作的),所以

我尝试使用字符串将布尔名称传递给,DoSomething(aBoolean As Boolean, BooleanName As String)以便我可以使用布尔值来了解条件,并使用字符串来了解要分配的布尔名称Convert.ToBoolean(BooleanName)

..它也没有用

甚至有可能做这样的事情吗?我觉得是的,但我仍在努力解决它

真实代码示例:

Private Sub PopupMessages_Button_Click(sender As Object, e As EventArgs) Handles PopupMessages_Button.Click
    Button_MouseClick(PopupMessages_Button, My.Settings.PopupMessages, ToolTip, PopupMessages_Button_Tooltip)
End Sub

Public Shared Sub Button_MouseClick(aButton As Button, aBoolean As Boolean, aToolTip As ToolTip, aToolTip_txt As String)
    If aBoolean Then
        aButton.BackColor = Color.WhiteSmoke
        aBoolean = False 
        aToolTip.SetToolTip(aButton, "(Disabled) " + aToolTip_txt)
    Else
        button.BackColor = Color.Green
        aBoolean = True 
        aToolTip.SetToolTip(aButton, "(Enabled) " + aToolTip_txt)
    End If
    My.Settings.Save()
End Sub

标签: vb.netbooleanparameter-passing

解决方案


有可能的。您可以通过将其设为ByRef参数来实现。例如

Private Sub Button1_Click() Handles Button1.Click
    DoSomething(My.Settings.boolean1)
End Sub

Public Shared Sub DoSomething(ByRef aBoolean As Boolean)
    aBoolean = Not aBoolean
End Sub 

String认为使用 a而不是 a会起作用并不是一个完全疯狂的想法Boolean,因为String引用类型。然而,尽管它是一种引用类型,但字符串被设计为不可变的,并且它们有点特殊。因此,实际上,它有点像值类型,尽管它在技术上是引用类型。如果您使用了可变引用类型,例如StringBuilder,那将会起作用(尽管我不建议这样做——ByRef显然更可取)。

话虽如此,值得一提的是,除了特殊情况外,ByRef大多数人通常不鼓励争论,因为它通常并不明显。当您阅读代码时,您无法轻易判断该方法更改了参数的值(在 C# 中更明显,因为您必须out在每个调用点指定)。通常建议该方法返回新值,而不是:

Private Sub Button1_Click() Handles Button1.Click
    My.Settings.boolean1 = DoSomething(My.Settings.boolean1)
End Sub

Public Shared Function DoSomething(aBoolean As Boolean)
    Return Not aBoolean
End Sub 

推荐阅读