有没有办法在VB .Net函数中返回多个类型?(不是像PHP内部函数那样的元组)

Mik*_* L. 4 .net vb.net

所以你知道PHP内部函数通常FALSE在函数失败时返回一个布尔值,或者当函数成功时返回一些其他数据类型?这在VB .Net中是否可行?

例如,我们在这里说这个简单的代码

Public Function TrySomething(ByVal Param As String) \\what would go here??
    If Param <> "MAGICWORD" Then
        Return False
    Else
        Return "You Win!"
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

你看我想在函数失败时返回一个BOOLEAN,在函数工作时返回一个字符串.有任何想法吗?我到处寻找,当我搜索"返回多种类型"时,我发现是Tuple.

Ste*_*fan 7

Dan说,你可以使用一个物体.但是,您必须在调用例程中检查返回的类型.

Sub Checkit()
    Dim ret As Object = TrySomething("MAGICWORD")
    If TypeOf ret Is Boolean Then
        'dosomething
        MsgBox("Nope!")
    End If
    If TypeOf ret Is String Then
        'dosomethingelse
        MsgBox("Yes, you won!")
    End If

End Sub

Public Function TrySomething(ByVal Param As String) As Object
    If Param <> "MAGICWORD" Then
        Return False
    Else
        Return "You Win!"
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

我不会这样做,我会创建一个结构或类来完全处理我想要的东西.像这样:

Sub Checkit()
    Dim ret As TryReturnStruct = TrySomething("MAGICWORD")
    MsgBox(ret.Message)
    If ret.Success Then
        MsgBox("Do you want to play again?")
    End If
End Sub

Structure TryReturnStruct
    Public Success As Boolean
    Public Message As String
End Structure

Public Function TrySomething(ByVal Param As String) As TryReturnStruct
    Dim ret As New TryReturnStruct

    If Param <> "MAGICWORD" Then
        ret.Success = False
        ret.Message = "Nope, not yet!"
    Else
        ret.Success = True
        ret.Message = "You Win!"
    End If
    Return ret
End Function
Run Code Online (Sandbox Code Playgroud)


Har*_*rsh 6

这对你有用:

Public Function TrySomething(ByVal Param As String) As Object
If Param <> "MAGICWORD" Then
    Return False
Else
    Return "You Win!"
End If
End Function
Run Code Online (Sandbox Code Playgroud)

你可以检查这样的值:

 Dim a As Boolean = TrySomething("")
 Dim b As String = TrySomething("MAGICWORD")
Run Code Online (Sandbox Code Playgroud)

  • 代码有一个缺陷:当执行dim a2时会发生什么样的boolean = TrySomething("我想引发异常")? (5认同)