我正在尝试从函数中 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多个不同类型的变量,那么你可以简单地定义一个自定义的结构.
我不知道这是否可行,但我的程序中有 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多个不同类型的变量,那么你可以简单地定义一个自定义的结构.