0

型の配列System.ArrayDouble()orに変換したいDouble(,)(どちらに変換するかは既にわかっています)。問題のあるコード行は次のとおりです

Dim kernel As Double() = CType(Array.CreateInstance(GetType(Double), _
  {2 * limit + 1}, {-limit}), Double())

Wherelimitは、有効な正の として事前定義されていますInteger。を取得しInvalidCastExceptionます。どうすればこれを行うことができますか?または、開始インデックスでDouble配列を作成する別の方法はありますか?< 0

4

1 に答える 1

0

このEnumerable.Rangeメソッドを使用して、次のような1次元配列を作成できます。

Dim start = 0
Dim count = 10

Dim singleArray = Enumerable.Range(start, count).ToArray()

多次元配列を作成するには、以下で行ったように、コレクションを変更するための独自の拡張メソッドを作成する必要があります。

Public Module Extensions
    <Runtime.CompilerServices.Extension()>
    Function SelectMultiDimension(Of T)(collection As IEnumerable(Of T), rows As Integer, cols As Integer) As T(,)
        Dim multiDimArray(rows - 1, cols - 1) As T
        Dim i As Integer = 0

        For Each item In collection
            If i >= multiDimArray.Length Then Exit For

            multiDimArray(i \ cols, i Mod cols) = item

            i += 1
        Next

        Return multiDimArray
    End Function
End Module

次に、次のように使用できます。

Dim mArray = Enumerable.Range(start, count).SelectMultiDimension(3, 4)
于 2012-10-20T09:23:47.193 に答える