2011-09-06 188 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