2012-12-14 62 views
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」,我想提醒字符串,如果有的話等等。

回答

5

我該如何做到這一點?

你不行。

一個函數只能返回一個類型,而不是多個。

您可以返回包含字符串和布爾值的自定義類型。

+0

不錯,簡單的解釋!真的沒有辦法讓一個函數返回VB中的多種類型? :) – gubbfett

+0

@gubbfett - 在大多數語言中沒有辦法做到這一點。 – Oded

+0

雖然我不推薦,但實際上你可以。 –

1

您可以返回Object,但它被認爲是非常糟糕的形式爲函數返回2個數據類型。

+0

好吧,爲什麼認爲不好? – gubbfett

+1

@gubbfett - 因爲那麼你需要檢查返回的類型並將其轉換爲它。它既容易出錯又增加了複雜性。 – Oded

+1

開始調試很困難'如果GetString(「A」)Then'將失敗。但更重要的是,這意味着該功能正在執行2個任務,這兩個任務應該分爲兩個獨立的功能。一個函數應該只返回一條信息,或者如果你想返回2,那麼考慮使用一個結構。 –

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 
0

正如Oded說,你不能從一個函數返回多個參數。

您的代碼示例中所做的並不太清楚,但您可以查看passing parameters by reference。正如答案中指出的那樣,通過引用傳遞參數對於:

當您想要返回操作的狀態或狀態以及操作的結果時。

這是和類似方法的工作方式。