使用参数时,将值分配给原始布尔值

时间:2018-10-05 14:27:33

标签: vb.net boolean parameter-passing

我试图将一个布尔值传递给另一个方法后,给它赋值(真/假)

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

'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 

它将值分配给布尔值,并且实际上不触及作为目标的原始布尔值

(显然,这种方式不起作用),所以

我尝试使用字符串将布尔名称传递给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

2 个答案:

答案 0 :(得分:1)

有可能。您可以通过将其设置为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代替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 

答案 1 :(得分:0)

要做的第一件事不是直接引用“ My.Settings”。这就像直接引用控件文本/整数(或其他任何东西)一样。加载值然后操作它们,然后执行所需的操作。

在此示例中,将两个布尔值作为一个类似的变量,并在Form_Load或初始化例程的初始化过程中将其加载。

private/public MySavedBoolean1 as Boolean
private/public MySavedBoolean2 as Boolean

Form_Load(或其他)

MySavedBoolean1 = My.Settings.boolean1
MySavedBoolean2 = My.Settings.boolean2

用法:

Private Sub Button1_Click() Handles Button1.Click
MySavedBoolean1 = Not MySavedBoolean1
'You can re-save it to settings if need be:
My.Settings.boolean1 = MySavedBoolean1
My.Settings.Save '(or you could do this later)
End Sub