3

我想要一个函数返回一个字符串或布尔值。像这样的东西:

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

...它返回一个字符串,当然它在将字符串转换为布尔值时会出错。我总是可以返回字符串并检查它的长度,但感觉很糟糕。或者我只是太喜欢 PHP 了?

但是有没有办法让它更像这样?如果我要求“B”,我知道它会返回一个布尔值,如果我要求“A”,我想提醒字符串是否存在等等。

4

4 回答 4

5

我现在该怎么做?

你不能。

一个函数只能返回一种类型,不能返回多种。

您可以返回包含字符串和布尔值的自定义类型。

于 2012-12-14T12:09:53.730 回答
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
于 2012-12-14T16:22:57.617 回答
1

您可以 return Object,但函数返回 2 种数据类型被认为是非常糟糕的形式。

于 2012-12-14T12:12:41.010 回答
0

正如Oded所说,你不能从一个函数返回多个参数。

从代码示例中不太清楚您在做什么,但您可以查看通过引用传递参数。正如那里的答案所指出的,通过引用传递参数对于:

当您想要返回操作的状态或状态以及操作的结果时。

这就是int.TryParse类似方法的工作方式。

于 2012-12-14T20:02:32.570 回答