如何定义一个扩展来重载“+”运算符以执行简单的数组连接

时间:2016-01-04 09:51:22

标签: .net operator-overloading

请问如何使“+”运算符超载,以便于简单的数组加入?

我们如何定义扩展以简化此操作,如下所示:

    Dim a = {1, 2}
    Dim b = {3, 4}
    Dim c = a + b ' should give {1, 2, 3, 4}

我收到以下错误:

'Error BC30452  Operator '+' is not defined for types 'Integer()' and 'Integer()'

1 个答案:

答案 0 :(得分:1)

重复Overloading the + operator to add two arrays

因此,由于这是不可能的(除了使用扩展),您可以使用LINQ来使用这个简单的解决方法:

Dim c = a.Concat(b).ToArray()

这是一个扩展的可能实现,它使用数组和列表作为输入,并且比LINQ方法更有效:

<System.Runtime.CompilerServices.Extension()> _
Public Function Plus(Of t)(items1 As IList(Of T), items2 As IList(Of T)) As T()
    Dim resultArray(items1.Count + items2.Count - 1) As t
    For i As Int32 = 0 To items1.Count - 1
        resultArray(i) = items1(i)
    Next
    For i As Int32 = 0 To items2.Count - 1
        resultArray(i + items1.Count) = items2(i)
    Next
    Return resultArray
End Function

您可以这样使用它:

Dim a = {1, 2}
Dim b = {3, 4}
Dim c = a.Plus(b)