我想将其转换为通用函数:
Dim NewArray As String() = {"a", "b", "c"}
MsgBox(String.Join(vbNewLine, NewArray))
这是我尝试过的:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim IntArray As Array = {1, 2, 3} ' Integer array
Dim StrArray() As String = {"a", "b", "c"} ' String array
MsgBox(Join_Array(IntArray, vbNewLine, Integer))
MsgBox(Join_Array(StrArray, vbNewLine, String))
End Sub
Private Function Join_Array(ByVal array As Object, ByVal Separator As String, ByVal array_type As Type)
Return String.Join(Separator, array.Cast(Of array_type))
End Function
答案 0 :(得分:1)
你也可以这样写:
Private Function Join_Array(ByVal array As Array, ByVal Separator As String)
Return String.Join(Separator, array.Cast(Of Object).Select(Function(x) x.ToString))
End Function
MsgBox(Join_Array(StrArray, " ")) ' a b c
MsgBox(Join_Array(IntArray, " ")) ' 1 2 3
在这里,您依赖对象的ToString
方法来执行您可能需要的任何格式设置。请注意,这实际上不是一般方法。泛型是在编译时指定的,但在这种情况下,我在运行时调用Integer
类覆盖ToString
方法。
正确的通用函数看起来像这样
Private Function Join_Array(Of T)(ByVal array As IEnumerable(Of T), ByVal Separator As String)
Return String.Join(Separator, array.Select(Function(x) x.ToString))
End Function
请注意,由于在编译时已知类型,因此无需在函数内部调用Cast
。但是,由于IntArray
是非通用的,因此您需要在Form1_Load
方法中将其称为:
MsgBox(Join_Array(IntArray.Cast(Of Integer), " ")) ' 1 2 3