Есть ли у vb.net встроенная функция, чтобы проверить, не затенен ли многомерный массив неизвестной формы от пользователя, прошедшего как параметр Function
? Если так, то, что это?проверить, нет ли многомерного массива?
ответ
Здесь есть две проблемы. Многомерные массивы (определенные как Integer(,)
) никогда не «зубчатые». Вы можете обнаружить это, проверив массив Rank. Методы GetLowerBound
и GetUpperBound
могут использоваться для проверки длины отдельных измерений по мере необходимости.
Если вы хотите проверить, полностью ли инициализирован массив Jagged (то есть: Integer()()
), и каждый дополнительный массив имеет одинаковую длину (т. Е. Определить, является ли дискретизированный массив «логически» прямоугольником), вы можете использовать что-то как:
Dim initializedToSameLengths As Boolean
If theArray(0) Is Nothing Then
' If first element is null, check for all others being null
initializedToSameLengths = theArray.All(Sub(a) a = Nothing)
Else
Dim firstLength = theArray(0).Length
initializedToSameLengths = theArray.All(Sub(a) a <> Nothing AndAlso a.Length = firstLength)
End If
Если массив многомерный, он будет иметь более чем на 1 размер (так Array.Rank
свойство будет >1
). Если массив неровный, он будет одномерным массивом с массивами в качестве элементов (поэтому его свойство Array.Rank
будет =1
).
Обратите внимание, что Array.Rank, являющийся одним, может быть одномерным, не-зубчатым массивом. –
ty для '(,)' 'никогда '' зубчатый ''! (так как я инициализирую 2d в 'WebMethod') –