Назначить один массив другому классическому asp

Я новичок в классическом asp, и работать с массивами неинтересно :(

Я продолжаю получать сообщение об ошибке

            dim isMyApiResponse

            if MyAvailRooms = "Error" then
                isMyApiResponse = false
            else
                isMyApiResponse = true
                dim MyAvailArray()

                If InStr( MyAvailRooms, "," ) > 1 Then 
                    'response.write("<h2>MyAvailRooms is " & MyAvailRooms)
                    'response.write("<h2>var type of My avil rooms is " & VarType(MyAvailRooms))
                    MyAvailRooms = CStr(MyAvailRooms)
                    dim tempArray
                    tempArray = split(MyAvailRooms, ",")

                    dim sizeTempArray
                    sizeTempArray = UBound(tempArray)

                    response.write ("<h2>type of sizeTempArray is " &VarType(MyAvailArray))
                    response.write("<br/>type of temp array is " & VarType(tempArray))

                    reDim MyAvailArray(sizeTempArray)
                    MyAvailArray  = tempArray

                else 
                    ReDim MyAvailArray(1)
                    MyAvailArray (0) = MyAvailRooms
                end if
            end if

Я получаю несоответствие типов в строке "MyAvailArray = tempArray" выше. Я предполагаю, что это проблема динамического фиксированного массива или что-то в этом роде. Оба типа возвращаются как 8204 в моем reponse.write, что, я думаю, является вариантом.

Я на пределе, пожалуйста, помогите мне, классические ниндзя ASP!


person iKode    schedule 08.07.2011    source источник


Ответы (2)


Пока я не могу объяснить, почему это вызывает ошибку:

MyAvailArray = tempArray

Вы можете перебирать каждый элемент массива и назначать их один за другим, и это должно работать;)

Dim i
for i = 0 to sizeTempArray
    MyAvailArray(i) = tempArray(i)
next
person BumbleB2na    schedule 08.07.2011
comment
Причина ошибки в том, что динамический массив не является статическим массивом, и один нельзя напрямую преобразовать в другой. - person Shadow Wizard Wearing Mask V2; 10.07.2011

У меня всегда были проблемы с объявлением динамических массивов с использованием синтаксиса Dim myArray(). Я всегда объявляю свои массивы как обычные варианты, что позволяет мне позже использовать оператор ReDim.

(Кроме того, если мне нужен пустой массив, я буду использовать функцию Array без аргументов, т.е. myArray = Array(). Преимущество в том, что вызов функции UBound вернет -1, а не выдаст ошибку, поэтому я могу легко определить, является ли массив пустым.)

Dim MyAvailArray

If InStr( MyAvailRooms, "," ) > 1 Then
    '<snip>'
    MyAvailArray = tempArray
Else 
    MyAvailArray = Array(MyAvailRooms)
End If

Обратите внимание, что для краткости я использовал функцию Array.


Кстати, проверка InStr не нужна, так как Split всегда будет возвращать массив, даже если в строке нет разделителя. Следовательно, вы можете переписать код так:

Dim MyAvailArray
MyAvailArray = Split(MyAvailRooms, ",")
person Cheran Shunmugavel    schedule 09.07.2011