実行時にオブジェクトが配列か、多次元配列か、多段ジャグ配列かどうかを調べるたい場合、型情報(Type)を参照することで検証することができます。

型情報からは、まずType.IsArrayプロパティによって、型が配列(多次元配列・多段ジャグ配列を含む)かどうかを判別することができます。 また、Array.Rankプロパティを参照することにより、Rankが1なら配列またはジャグ配列、2以上なら多次元配列として分類することができます。 さらに、Type.GetElementTypeメソッドを呼び出すことにより、配列の要素の型を取得することができるため、1次元の配列なのかジャグ配列なのか、またジャグ配列の場合は何段なのかを知ることができます。

これを具体的なコードにすると、次のようになります。

オブジェクトが配列か多次元配列かジャグ配列かを判別する
Imports System
Imports System.Collections.Generic

Class Sample
  Shared Sub Main()
    PrintTypeOfArray(New Integer() {})
    PrintTypeOfArray(New Integer(,) {{}})
    PrintTypeOfArray(New Integer(,,) {{{}}})
    PrintTypeOfArray(New Integer()() { New Integer() {} })
    PrintTypeOfArray(New Integer()()() { New Integer()() { New Integer() {} } })
    PrintTypeOfArray(0)
    PrintTypeOfArray(Nothing)
  End Sub

  ' 引数で与えられるオブジェクトから、配列の種類を分類して表示する
  Shared Sub PrintTypeOfArray(ByVal o As Object)
    If o Is Nothing Then
      Console.WriteLine("Nothingです")
      Return
    End If

    ' 型情報を取得する
    Dim t As Type = o.GetType()

    ' 型が配列かどうか
    If Not t.IsArray Then
      Console.WriteLine($"配列ではありません ({t})")
      Return
    End If

    ' 配列(Array)にキャスト
    Dim arr As Array = DirectCast(o, Array)

    ' 配列は多次元化かどうか
    If 1 < arr.Rank Then
      Console.WriteLine($"{arr.Rank}次元配列です ({t})")
    Else
      ' 配列が1次元の場合、配列の要素の型が配列となっているか
      ' どうかを再帰的に調べ、同時にその段数も調べる
      Dim nest As Integer = 1
      Dim te As Type = t

      Do
        te = te.GetElementType()

        ' 配列の要素の型が配列かどうか
        If te.IsArray Then
          nest += 1 ' 段数を計上する
        Else
          Exit Do
        End If
      Loop

      If nest = 1 Then
        Console.WriteLine($"配列です ({t})")
      Else
        Console.WriteLine($"{nest}段のジャグ配列です ({t})")
      End If
    End If
  End Sub
End Class
実行結果
配列です (System.Int32[])
2次元配列です (System.Int32[,])
3次元配列です (System.Int32[,,])
2段ジャグ配列です (System.Int32[][])
3段ジャグ配列です (System.Int32[][][])
配列ではありません (System.Int32)
Nothingです