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

...文字列を返します。もちろん、文字列をboolに変換するとエラーが発生します。いつでも文字列を返して長さをチェックできましたが、気分が悪いです。それとも私はPHPに夢中になっているのでしょうか?

しかし、これをもっとこのようにする方法はありますか?「B」を要求するとブール値が返されることはわかっていますが、「A」を要求すると文字列にアラートが発生した場合などに警告します。

4

4 に答える 4

5

どうすればこれを行うことができますか?

できません。

関数は、複数ではなく、1つのタイプのみを返すことができます。

文字列とブール値を含むカスタム型を返すことができます。

于 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

を返すことはできますがObject、関数が2つのデータ型を返すことは非常に悪い形式と見なされます。

于 2012-12-14T12:12:41.010 に答える
0

Odedが言ったように、関数から複数のパラメーターを返すことはできません。

コード例から何をしているのかはあまり明確ではありませんが、参照によってパラメーターを渡すことを検討できます。そこでの回答で指摘されているように、参照によってパラメーターを渡すことは、次の場合に役立ちます。

操作の状態またはステータスに加えて、操作の結果を返したい場合。

これはint.TryParse、同様の方法がどのように機能するかです。

于 2012-12-14T20:02:32.570 に答える