我正在尝试从函数中 return 3 个值

I am trying to return 3 values from a function

我不知道这是否可行,但我的程序中有 4 或 5 次这样的代码,但具有不同的 DOhav*** 变量。我试图将它压缩为 1 个函数,并使用一个通用的 DOhavART、DOhavART2、DOhavART3 变量来覆盖变量。我正在将完成功能所需的值传递给它。但是我只能在 return 中收到 1 个变量。我在网上搜索过尝试各种方法,例如使用数组函数或构建结构或从 3 构建一个大字符串并在 returns 时拆分它,但这些方法无法以我可以使用的方式工作。它的工作方式是查看一组文件夹,看看它是否包含与系统 (sysSELsh)、游戏 (RnameSH) 和图像类型 (ArtTYPE)

相匹配的正确图像
For Each foundDirectory In My.Computer.FileSystem.GetDirectories((lbPath & "\Images\" & Mid(sysSELsh, 1, Len(sysSELsh) - 4) & "\Box - Front\"))

到最后它应该有 3 个文件的完整路径 return(确实如此)但是当它 return 时我无法检索 3 个变量,当它 returns 它会检查这 3 个文件中是否存在任何一个,然后将其添加到列表框中,选择是或否。必须有 3 returns,因为这是可以命名或构造文件的不同方式。我让它在 5 个不同的代码部分工作,但是有单独的变量,代码中的其他所有内容都是 same.There 实际上就像 20 个文件夹来搜索所有不同类型的图像,所以将它压缩成一个函数是我的大目标。

Public Function FINDArtTYPE(ByVal sysSELsh As String, ByVal RnameSH As String, ByVal ArtTYPE As String) As String

    Dim extFIND = RnameSH.Substring(RnameSH.LastIndexOf(".") + 1)
    Dim RepSTR As String = ""
    Dim DOhavART As String = ""
    Dim DOhavART2 As String = ""
    Dim DOhavART3 As String = ""

    If Len(extFIND) = 2 Then

        DOhavART = lbPath & "\Images\" & Mid(sysSELsh, 1, Len(sysSELsh) - 4) & ArtTYPE & Mid(RnameSH, 1, Len(RnameSH) - 3) & ".PNG"

    ElseIf Len(extFIND) = 3 Then

        DOhavART = lbPath & "\Images\" & Mid(sysSELsh, 1, Len(sysSELsh) - 4) & ArtTYPE & Mid(RnameSH, 1, Len(RnameSH) - 4) & ".PNG"

    End If

    If FileExists(DOhavART) = False Then

        DOhavART2 = lbPath & "\Images\" & Mid(sysSELsh, 1, Len(sysSELsh) - 4) & ArtTYPE & DBid & "-01.PNG"

        If InStr(3, DOhavART2, ":") <> 0 Then RepSTR = Replace(DOhavART2, ": ", "_ ") : If RepSTR <> "" Then DOhavART2 = RepSTR : RepSTR = ""
        If InStr(3, DOhavART2, "'") <> 0 Then RepSTR = Replace(DOhavART2, "'", "_") : If RepSTR <> "" Then DOhavART2 = RepSTR : RepSTR = ""
        If InStr(3, DOhavART2, "/") <> 0 Then RepSTR = Replace(DOhavART2, "/", "_") : If RepSTR <> "" Then DOhavART2 = RepSTR : RepSTR = ""
        If InStr(3, DOhavART2, " / ") <> 0 Then RepSTR = Replace(DOhavART2, " / ", " _ ") : If RepSTR <> "" Then DOhavART2 = RepSTR : RepSTR = ""

    End If

    If FileExists(DOhavART) = False And FileExists(DOhavART2) = False Then

        For Each foundDirectory In My.Computer.FileSystem.GetDirectories((lbPath & "\Images\" & Mid(sysSELsh, 1, Len(sysSELsh) - 4) & ArtTYPE))

            Dim FileCount As Integer = Directory.GetFiles(foundDirectory & "\").Length

            If FileCount > 0 Then

                If Len(extFIND) = 2 Then

                    DOhavART = foundDirectory & "\" & Mid(RnameSH, 1, Len(RnameSH) - 3) & ".PNG"

                    If FileExists(DOhavART) = True Then DOhavART3 = DOhavART

                ElseIf Len(extFIND) = 3 Then

                    DOhavART = foundDirectory & "\" & Mid(RnameSH, 1, Len(RnameSH) - 4) & ".PNG"

                    If FileExists(DOhavART) = True Then DOhavART3 = DOhavART

                End If

                If FileExists(DOhavART) = False And FileExists(DOhavART3) = False Then

                    DOhavART2 = (foundDirectory & "\" & DBid & "-01.PNG")

                    If InStr(3, DOhavART2, ":") <> 0 Then RepSTR = Replace(DOhavART2, ": ", "_ ") : If RepSTR <> "" Then DOhavART2 = RepSTR : RepSTR = ""
                    If InStr(3, DOhavART2, "'") <> 0 Then RepSTR = Replace(DOhavART2, "'", "_") : If RepSTR <> "" Then DOhavART2 = RepSTR : RepSTR = ""
                    If InStr(3, DOhavART2, "/") <> 0 Then RepSTR = Replace(DOhavART2, "/", "_") : If RepSTR <> "" Then DOhavART2 = RepSTR : RepSTR = ""
                    If InStr(3, DOhavART2, " / ") <> 0 Then RepSTR = Replace(DOhavART2, " / ", " _ ") : If RepSTR <> "" Then DOhavART2 = RepSTR : RepSTR = ""

                    If FileExists(DOhavART2) = True Then DOhavART3 = DOhavART2

                End If

            End If

        Next

    End If

    Return DOhavART
    Return DOhavART2
    Return DOhavART3

End Function

感谢你们对此提供的任何帮助。

只需return一个List(Of String).

首先重新定义你的函数声明:

Public Function FINDArtTYPE(ByVal sysSELsh As String, ByVal RnameSH As String, ByVal ArtTYPE As String) As List(Of String)

然后在函数的开头添加:

Dim f As New List(Of String)

然后在代码中添加任意数量的元素:

f.Add("something")

最后:Return f

调用过程只需计算函数 return 编辑了多少项目,并根据需要在它们上循环。

如果你想同时return多个不同类型的变量,那么你可以简单地定义一个自定义的结构.