函数返回字符串或布尔值

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个回答

5

我现在怎么做?

不能。

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

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


很好的简单解释!在VB中真的没有办法使一个函数返回多种类型吗? :) - gubbfett
@gubbfett - 在大多数编程语言中无法实现。 - Oded
@Ciarán - 你的函数返回类型是 object。这不是两种不同的返回类型。 - Oded
是的,但一个对象可以是字符串或布尔值,因此严格来说它返回一个对象,但该对象可以有两种类型。 - Ciarán
1
@Ciarán - 对象可以是字符串、布尔值或任何类型。返回类型仍然是Object,而不是Object或其他类型。至于返回自定义类型-是的,我在我的答案中提到了这一点。 - Oded
显示剩余2条评论

2

我会使用数组列表(Array list)。你可以在列表中存储任何类型的数据,然后在返回时进行解析。正如上面所解释的那样,这并不是最佳实践,但当你必须完成任务时...目的地正义手段。不建议使用。

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

1

你可以返回Object,但是函数返回两种数据类型被认为是非常不好的形式。


1
@gubbfett - 因为这样你需要检查返回的类型并将其转换。这既容易出错又增加了复杂性。 - Oded
1
从一开始就 debug 是很困难的,例如 If GetString("A") Then 这段代码将会失败。但更重要的是,这意味着该函数执行了两个应该分别在两个独立函数中执行的任务。一个函数只该返回一个信息,或者如果你想返回两个信息,请考虑使用结构体。 - Ciarán

0

正如Oded所说,函数无法返回多个参数。

从您的代码示例中不太清楚您在做什么,但您可以考虑通过引用传递参数。正如答案中指出的那样,通过引用传递参数对于以下情况非常有用:

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

这就是int.TryParse和类似方法的工作原理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接