我想要一个函数来返回String或Boolean。像这样:
Public Function GetString(Byval What As String) 'As... someting?
If (What = "A") Then
Return "String to return"
Else if (What = "B") Then
Return True
End If
Return False 'Nothing to return
End Function
我现在该怎么做?如果我问的话
If GetString("A") Then
MsgBox(GetString())
End IF
...它返回一个字符串,当然它在将字符串转换为bool时出错。 我总是可以返回字符串并检查它的长度,但感觉很糟糕。或者我可能只是过多地使用PHP?
但有没有办法更像这样呢?如果我要求“B”我知道它会返回一个bool,如果我要求“A”我想提醒字符串是否有任何等等。
答案 0 :(得分:5)
我现在该怎么做?
你不能。
一个函数只能返回一个类型,而不是多个。
您可以返回包含字符串和布尔值的自定义类型。
答案 1 :(得分:2)
我会使用数组列表。您可以在列表中存储所需的任何类型,然后在返回时解析它。这实际上不是如上所述的最佳实践,但是当你必须完成任务时...最终证明了手段的合理性。不建议。
Public Function GetString(Byval What As String) As ArrayList
Dim b as boolean = True
dim myArrayList as Arraylist = New ArrayList
If (What = "A") Then
ArrayList.Add("String to return")
Else if (What = "B") Then
ArrayList.Add(b)
End If
Return False 'Nothing to return
End Function
以下概念证明:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim a As Boolean = True
Dim myarraylist As ArrayList = New ArrayList
myarraylist.Add(a)
myarraylist.Add("g")
Debug.WriteLine(myarraylist.GetType.ToString)
Debug.WriteLine(myarraylist(0).GetType.ToString)
Debug.WriteLine(myarraylist(1).GetType.ToString)
If myarraylist(0).GetType.ToString = "System.string" Then
Debug.WriteLine("Function returned a String")
ElseIf myarraylist(0).GetType.ToString = "System.boolean" Then
Debug.WriteLine("Function returned a Boolean")
End If
End Sub
答案 2 :(得分:1)
您可以返回Object
,但函数返回2种数据类型被认为是非常糟糕的形式。
答案 3 :(得分:0)
如Oded所述,您不能从函数返回多个参数。
您在代码示例中所做的事情并不太清楚,但您可以查看passing parameters by reference。正如答案所指出的,通过引用传递参数对于:
非常有用当您想要返回操作的状态或状态以及操作的结果时。
这就是int.TryParse
和类似方法的工作原理。