【问题标题】:Function return string or boolean函数返回字符串或布尔值
【发布时间】:2023-03-20 09:30:01
【问题描述】:

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

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”,我想提醒字符串是否有等等。

【问题讨论】:

    标签: vb.net string winforms function boolean


    【解决方案1】:

    我现在该怎么做?

    你不能。

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

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

    【讨论】:

    • 很好很简单的解释! VB中真的没有办法让函数返回多种类型吗? :)
    • @gubbfett - 大多数语言都无法做到这一点。
    • 其实可以,虽然我不推荐。
    • @Ciarán - 函数的返回类型是 object。这不是两种不同的返回类型。
    • @Ciarán - 对象可以是字符串、布尔值或任何东西。返回类型仍然是 Object - 不是 Object 或其他。至于返回自定义类型 - 是的,我在回答中确实提到了这一点。
    【解决方案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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • @gubbfett - 因为你需要检查返回的类型并转换为它。它既容易出错,又增加了复杂性。
      • 一开始很难调试If GetString("A") Then 将失败。但更重要的是,这意味着该函数正在执行 2 个任务,这些任务应该在 2 个单独的函数中。一个函数应该只返回一条信息,或者如果你想返回 2 则考虑使用结构。
      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-05-06
        • 1970-01-01
        • 2021-10-22
        • 2018-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        • 2021-10-29
        相关资源
        最近更新 更多