【问题标题】:How to make a generic function to join arrays?如何制作一个通用函数来连接数组?
【发布时间】:2013-06-09 04:47:10
【问题描述】:

我想把它转换成一个泛型函数:

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

【问题讨论】:

    标签: .net arrays vb.net string generics


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多