2011-01-04 4 views
1

Я пытаюсь создать функцию для анализа всех значений в многомерном Array с учетом всего одного измерения. Детали не актуальны, но для этой функции мне нужно вернуть одномерный Array, содержащий значения того же типа, который имеет исходный многомерный Array.Создать новый массив типа параметров

Чтобы передать любые Array с любыми измерениями в мою функцию, я объявил тип этого параметра как Array. Однако как мне создать новый Array этого конкретного типа (например, Integer)?

В настоящее время у меня есть следующий код:

Function GetRow(ByVal arr As Array) As Array 
    Dim result As (...) 'This should be Integer() if arr contains Integers, etc. 
    Return result 
End Function 

Как объявить тип result, чтобы сделать его с тем же типом значений как arr? New Array невозможно как указано MustInherit.

+0

не может дать хороший ответ в VB.Net, но это может помочь: HTTP://msdn.microsoft.com/en-us/library/w256ka79.aspx –

ответ

4

Использование дженериков здесь, так что функция может обрабатывать любой тип:

Function GetRow(Of T)(ByVal arr() As T) As T() 
    Dim result() As T 
    ReDim result(arr.Length - 1) 
    Array.Copy(arr, result, arr.Length) 
    Return result 
End Function 

Пример использования:

Dim iarr() As Integer = {1, 2, 3, 4} 
    Dim copy = GetRow(iarr) 
+0

Большое спасибо. Однако, похоже, это не может принимать многомерные массивы. Я предполагаю, что это потому, что вы объявляете тип arr как arr(), т. Е. Одномерный массив. Не могли бы вы объяснить, что я могу делать неправильно? – pimvdb

+1

Да, вам понадобится еще одна перегрузка для многомерных массивов. Объявите массивы как (,) для 2dim и соответствующим образом настройте код. –

+0

Хорошо, спасибо. Это не полностью общий, но я буду работать только с одной, двумя или трехмерными массивами. – pimvdb

Смежные вопросы