2011-09-06 189 views
0

嗨有人可以告訴我如何從函數返回多個值嗎?我有我的函數中App_Code文件一個單獨的文件,這就是:從VB中的某個類中的函數返回多個值

Public Function GetQuoteStatus(ByVal QuoteID As String) As String 

Dim quoteStatus As String 

Dim con As New SqlConnection 
Dim cmd As New SqlCommand 

Try 
    con.ConnectionString = ConfigurationManager.AppSettings("quotingSystemConnectionString") 
    con.Open() 
    cmd.Connection = con 
    cmd.CommandText = "SELECT Status FROM Quote WHERE QuoteID =" & QuoteID & ";" 
    Dim lrd As SqlDataReader = cmd.ExecuteReader() 

    While lrd.Read() 
     quoteStatus = lrd("Status") 
    End While 

Catch ex As Exception 

Finally 
    con.Close() 
End Try 

Return quoteStatus 

End Function 

從內部在我的地盤我通常會另一個VB文件獲取返回的quoteStatus使用:

Dim statusHelper As New quoteStatusHelper() 
Dim quoteStatus As String = statusHelper.GetQuoteStatus("QuoteID") 

然而,這是對於一個返回的值來說都很好,但是如果我想返回多個值...我如何訪問它們?

非常感謝!

+0

看一看[這](http://www.homeandlearn.co.uk/net/nets9p4.html)。 –

+0

感謝馬丁。這是一個非常棒的免費網站! –

回答

2

你可以使用

Public Function GetQuoteStatus(ByVal QuoteID As String) As String() 

這讓你返回一個字符串數組,所以是沒有限制的數據,你可以有。
缺點是你必須解析數組。

你甚至可以使用

Public Function GetQuoteStatus(ByVal QuoteID As String, 
    Byref Second As String) As String 

這讓你返回一個字符串作爲結果,並設置另一個變種(Second)的值;你可以使用多個Byref變量返回多個值...
缺點是你必須靜態聲明你的函數並修改所有以前的調用。在這種情況下,重構的使用是可以接受的!

編輯:
你甚至可以返回一個類,例如。
聲明一個適合您的需求的類(包含所有字段,getters,setter和構造函數),並且在函數內部可以創建該類的實例,填充每個字段並返回此類。
易於實施,易於使用。

再次編輯:

Public Class MyClass 
    Public Property Val1 As String 
    Public Property Val2 As String 
    Public Property Val3 As String 

    Public Sub New(ByVal newVal1 As String, ByVal newVal2 As String, ByVal newVal3 As String) 
     Val1 = newVal1 
     Val2 = newVal2 
     Val3 = newVal3 
    End Sub 
End Class 

Public Function GetInfo() As MyClass 
    Dim mc As New MyClass("test1", "test2", "test3") 
    Return mc 
End Function 
+0

嗨馬可。也許有更好的方法來處理這個問題?也許功能是不是使用的東西?對不起,我正在學習,sloooowly :) –

+0

@ Mr-Easily-Confused:看看我編輯的帖子 – Marco

+0

謝謝Marco。是否有可能想到在函數中構建一個對象並返回它而不是字符串/ int等,然後將對象分解回來?似乎是一個好主意,但我不能得到它的工作..? 例如。 公共功能GetQuoteStatus(BYVAL QuoteID作爲字符串)作爲對象 '暗淡testObj作爲新Object' 'testObj.val1 = 「測試1」'' testObj.val2 = 「test2的」'' testObj.val3 = 「TEST3」 ' 'return testObj' –

0

您可以使用ByRefarrays(見@Marco後)返回多個值。您也可以爲您的目的提供一個對象。

例如,

Public Class Info 
    Public Property No As Integer 
    Public Property Name As String 
End Class 
.... 
Public Function GetInfo() As Info 
     Dim inf As New Info 
     inf.No = 10 
     inf.Name = "A" 
     Return inf 
End Function 
.... 
0

我認爲「正確的/最佳」的方式來處理那些需要返回一對夫婦離散(通常是原語)類型是Tuple(Of T1, T2, T3, T4, T5, T6, T7, TRest)一個單一的功能。

像這樣的事情

Public Function MyExampleMethod() As Tuple(Of String, Integer, Guid) 
    Return New Tuple(Of String, Integer, Guid)("Value1", 2, Guid.NewGuid) 
End Function