如何使一个通用功能的加入数组? [英] How to make a generic function to join arrays?

查看:113
本文介绍了如何使一个通用功能的加入数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想转换到这一个泛型函数:

 昏暗NewArray作为字符串()= {A,B,C}
MSGBOX(的string.join(vbNewLine,NewArray))
 

这是我已经试过:

 私人小组Form1_Load的(发送者为对象,E作为EventArgs的)把手MyBase.Load

    昏暗IntArray作为阵列= {1,2,3}整数数组
    昏暗StrArray()作为字符串= {A,B,C}String数组

    MSGBOX(Join_Array(IntArray,vbNewLine,整数))
    MSGBOX(Join_Array(StrArray,vbNewLine,字符串))

结束小组

专用功能Join_Array(BYVAL数组作为对象,BYVAL分隔符作为字符串,BYVAL ARRAY_TYPE为类型)
    返回(分离器,array.Cast(ARRAY_TYPE))的string.join
端功能
 

解决方案

您也可以这样写:

 专用功能Join_Array(BYVAL阵列阵列,BYVAL分隔符作为字符串)
    返回的string.join(分离器,array.Cast(对象)。选择(功能(X)x.ToString))
端功能

MSGBOX(Join_Array(StrArray,))'A B C
MSGBOX(Join_Array(IntArray,))'1 2 3
 

在这里,你依赖于对象的的ToString 办法做任何格式,你可能需要。请注意,这实际上不是一个通用的方法。泛型是在编译时指定的,但在这种情况下,我打电话了整数类的了的ToString 方法的覆盖在运行时。

有一个适当的通用功能看起来像这样

 专用功能Join_Array(Of T)中(BYVAL阵列为IEnumerable(Of T)中,分离BYVAL作为字符串)
    返回的string.join(分离器,array.Select(功能(X)x.ToString))
端功能
 

的通知没有必要调用铸造,因为里面的功能,因为类型是已知在编译时。但是,由于 IntArray 是不通用的,在你的 Form1_Load的方法,你不得不这样称呼它:

  MSGBOX(Join_Array(IntArray.Cast(整数),))'1 2 3
 

I want to convert this into a generic function:

Dim NewArray As String() = {"a", "b", "c"}
MsgBox(String.Join(vbNewLine, NewArray))

This is what I've tried:

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

解决方案

You could also write this:

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

Here, you depend on the object's ToString method to do any formatting you might need. Note that this is not actually a generic method. Generics are specified at compile time, but in this case, I'm calling the Integer class's override of the ToString method at run time.

A proper generic function would look like this

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

Notice there is no need to call Cast since inside the function, since the type is known at compile time. However, because IntArray is non-generic, in your Form1_Load method you'd have to call it like this:

MsgBox(Join_Array(IntArray.Cast(Of Integer), " ")) ' 1 2 3

这篇关于如何使一个通用功能的加入数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆