Я пытаюсь вернуть 3 значения из функции - PullRequest
0 голосов
/ 11 апреля 2020

Я не знаю, возможно ли это, но у меня есть такой код 4 или 5 раз в моей программе, но с разными переменными DOhav ***. Я пытаюсь сжать его до 1 функции с общими переменными DOhavART, DOhavART2, DOhavART3, чтобы покрыть переменные. Я передаю ему значения, необходимые для завершения функции. Но я могу получить только 1 переменную в ответ. Я искал в Интернете, пробуя различные вещи, такие как использование функции массива или построение структуры или построение большой строки из 3 и разбиение ее, когда она возвращается, но они не работают так, как я могу использовать. Как это работает, он смотрит на набор папок и видит, что он содержит правильные изображения, соответствующие системе (sysSEL sh), игре (Rname SH) и типу изображения (ArtTYPE)

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

к концу у него должно быть 3 файла с полным путем для возврата (что он и делает), но я не могу получить 3 переменные, когда он возвращает, когда он возвращает, он проверяет, существует ли какой-либо из 3 файлов, тогда добавить его в список с да или нет. Должно быть 3 возврата, так как именно так можно назвать или структурировать файл разными способами. У меня он работает в 5 различных разделах кода, но с отдельными переменными и всем остальным в коде одинаково. На самом деле, есть 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

Спасибо за любую помощь, которую вы, ребята, можете оказать с этим.

1 Ответ

0 голосов
/ 11 апреля 2020

Просто верните 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

Вызывающая процедура просто должна определить, сколько элементов возвращается функцией и l oop на них по мере необходимости.

Если вы хотите вернуть несколько переменных разных типов одновременно, то вы можете просто определить пользовательскую структуру .

...