Возвращение нескольких значений из функции в особом классе в VB - PullRequest
0 голосов
/ 06 сентября 2011

Привет. Может кто-нибудь показать мне, как вернуть несколько значений из функции?У меня есть функция в отдельном файле в App_Code, и вот она:

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

Чтобы получить возвращенный quoteStatus из другого файла vb на моем сайте, я обычно использую:

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

Однако это все хорошо и хорошо для одного возвращаемого значения, но что если я хочу вернуть несколько значений ... Как получить к ним доступ?

Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 06 сентября 2011

Вы можете использовать

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

Это позволяет вам возвращать строковый массив, поэтому нет никаких ограничений на данные, которые вы можете иметь.
Минусы - вы должны анализировать массив.

Вы даже можете использовать

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

Это позволит вам вернуть строку в качестве результата и установить значение другого var (Second);Вы можете использовать более одной Byref переменной для возврата нескольких значений ...
Минус в том, что вам необходимо статически объявить вашу функцию и изменить все предыдущие вызовы.В этом случае рекомендуется использовать рефакторинг!

РЕДАКТИРОВАНИЕ:
Вы можете даже вернуть класс, например.
Объявите класс, который соответствует вашим потребностям (со всемиполей, геттеров, сеттеров и конструкторов) и внутри вашей функции вы можете создать экземпляр этого класса, заполнить каждое поле и вернуть этот класс.
Простота реализации, простота использования.

РЕДАКТИРОВАНИЕОПЯТЬ:

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 голосов
/ 06 сентября 2011

Я считаю, что «правильным / лучшим» способом работы с единственной функцией, которая должна возвращать пару дискретных (обычно примитивных) типов, является кортеж (из T1, T2, T3, T4, T5T6, T7, TRest) .

Как-то так

Public Function MyExampleMethod() As Tuple(Of String, Integer, Guid)
    Return New Tuple(Of String, Integer, Guid)("Value1", 2, Guid.NewGuid)
End Function
0 голосов
/ 06 сентября 2011

Вы можете вернуть несколько значений, используя ByRef и arrays (см. Сообщение @Marco). Вы также можете return/pass объект для вашей цели.

Например,

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
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...