2011-07-21 27 views
0

我試圖拉平與ConvertAll多維數組,但我不能得到它的工作:ConvertAll失敗的NullReferenceException

Private Function Flatten(ByRef a As Object) As Object 
    Dim elements As Integer = 0 
    Dim size As Integer 
    For r = 0 To a.Rank - 1 
     size = a.GetUpperBound(r) - a.GetLowerBound(r) + 1 
     If elements = 0 Then 
      elements = size 
     Else 
      elements = elements * size 
     End If 
    Next 
    Dim result(elements - 1) As Object 
    ' Fails ! 
    result = a.ConvertAll(a, New Converter(Of Object, Object)(Function(x) x)) 
    Return result 
End Function 

Sub Main() 
    Dim a(,) As Integer = {{1, 2, 3}, {4, 5, 6}} 
    Dim b(5) As Integer 
    b = Flatten(a) 
End Sub 

爲什麼它拋出的NullReferenceException?

由於

回答

1

按照MSDN documentationArray.ConvertAll()花費TInput零基於一維陣列。您有a(,)定義爲2維

+0

謝謝。可悲的是,你是對的。我被這個誤導了「當在多維數組之間進行復制時,數組的行爲就像一個長的一維數組,其中行(或列)在概念上是首尾相連的。例如,如果一個數組有三行(或多列)每個元素有四個元素,從數組開始複製六個元素將複製第一行(或列)的所有四個元素和第二行(或列)的前兩個元素。「從http://msdn.microsoft.com/en-us/library/k4yx47a1.aspx,這導致我認爲我可以擺脫它。 – smirkingman