【问题标题】:ConvertAll fails with NullReferenceExceptionConvertAll 失败并出现 NullReferenceException
【发布时间】:2011-07-21 10:44:13
【问题描述】:

我正在尝试使用 ConvertAll 展平一个多维数组,但我无法让它工作:

 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?

谢谢

【问题讨论】:

    标签: .net vb.net arrays


    【解决方案1】:

    根据 msdn documentationArray.ConvertAll()TInput 采用基于零的一维数组。您将a(,) 定义为二维

    【讨论】:

    • 谢谢。可悲的是,你是对的。我被这个误导了“在多维数组之间复制时,数组的行为就像一个长的一维数组,其中行(或列)在概念上是首尾相连的。例如,如果一个数组有三行(或列)每个有四个元素,从数组的开头复制六个元素将复制第一行(或列)的所有四个元素和第二行(或列)的前两个元素。”来自msdn.microsoft.com/en-us/library/k4yx47a1.aspx,这让我觉得我可以侥幸逃脱。
    猜你喜欢
    • 2014-07-04
    • 2016-12-29
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2017-11-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多