首页 > 解决方案 > 编写一个接受一维或二维数组作为输入的函数 - vb.net

问题描述

我正在尝试编写一个接受两种不同类型作为参数的函数。这个例子是一个矩阵乘法函数,我希望它适用于 1D 或 2D 数组,这样我就可以用它来将两个矩阵相乘或将一个矩阵和一个向量相乘。这可能吗?

Private Function MatrixMultiplication(byVal input1 As Type1, byVal input2 as Type2)
    If Type1 == Double(,) And Type2 == Double(,) Then
        Do Something
    ElIf Type1 == Double(,) And Type2 == Double() Then
        Do Something
End Function

编辑:有人建议这个问题是那个问题的重复。我拒绝了这个问题作为我的答案,因为范围不同。这个问题是关于在覆盖时不必要地重复代码。这个问题是关于将不同类型的传递参数,特别是一维数组和二维数组,传递给同一个函数。重载是解决这个问题的方法,但问题完全不同。由于我在不知道“过载”这个词的情况下找不到我正在寻找的答案,我相信如果其他人遇到同样的问题,找到这个答案很重要。

标签: vb.netfunctiontypesargumentsoverloading

解决方案


结果无论我搜索多少,我都找不到答案,因为我不知道“过载”这个词。感谢 Jimi 在评论中提供答案。我重载了这个函数,它可以工作了!这是我的代码,以防有人想知道。再次感谢。

    Private Function matrixMultiply(A As Double(,), B As Double(,)) As Double(,)
        If A.GetUpperBound(1) = B.GetUpperBound(0) Then
            ' A(m x n) * B(n x o) = C(m x o)
            Dim C(A.GetUpperBound(0), B.GetUpperBound(1)) As Double
            ' C(i,j) = Sum(k=1 to n)(A(i,k)*B(k,j))
            For i As Integer = 0 To A.GetUpperBound(0)
                For j As Integer = 0 To B.GetUpperBound(1)
                    For k As Integer = 0 To A.GetUpperBound(1)
                        C(i, j) += A(i, k) * B(k, j)
                    Next
                Next
            Next
            Return C
        Else
            Throw New ArgumentException(String.Format("Array dimensions do not match for multiplication"))
        End If
    End Function

    ' overloaded
    Private Function matrixMultiply(A As Double(,), B As Double()) As Double()
        If A.GetUpperBound(1) = B.GetUpperBound(0) Then
            Dim C(A.GetUpperBound(0)) As Double
            For i As Integer = 0 To A.GetUpperBound(0)
                For j = 0 To A.GetUpperBound(1)
                    C(i) += A(i, j) * B(j)
                Next
            Next
            Return C
        Else
            Throw New ArgumentException(String.Format("Array dimensions do not match for multiplication"))
        End If

推荐阅读