vb.net - 使用参数时为原始布尔值赋值
问题描述
在将其传递给另一个方法后,我试图传递一个布尔值并为其分配一个值(真/假)
我希望它与多个布尔值一起使用,例如:
'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
解决方案
有可能的。您可以通过将其设为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
推荐阅读
- c++ - 为什么 C++17 中 std::unique_ptr(new int()) 的 CTAD 失败?
- django - 有问题的 Django Url NoReverseMatch
- php - TCPDF 和 PHPMailer PDF 被破坏
- javascript - 单选按钮不适合表格?
- firebase - 如何使用 Flutter 检查 Firestore 中是否已存在的文档 ID
- javascript - Jquery Inputmask保存错误的货币价值
- java - 如何在java应用程序中检测运行JVM的终端
- python - 选择选项菜单后保存输出(python - Tkinter)
- ubuntu - icu-config 无效但已安装
- android - Xamarin - Android 应用程序无法再访问网站