Идентификация массивов:Optional ByRef DATA as Object=Nothing

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

ozyabkin
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 16.11.2005 (Ср) 0:02

Идентификация массивов:Optional ByRef DATA as Object=Nothing

Сообщение ozyabkin » 19.03.2006 (Вс) 1:18

Не могу идентифицировать необязательную переменные VINIT и VOUT.
В подпрограмме несколько вариантов.
1) если в вызываемой командной строке нет ссылки на VINIT и VOUT - 1 вариант расчета;
2) если в вызываемой командной строке ссылка на VINIT присутствует и при входе в подпрограмму VINIT не имеет массива /Ubound(VINIT)<0/ - 2 вариант расчета заполнения массива VINIT значениями;
3) если в вызываемой командной строке ссылка на VINIT присутствует и при входе в подпрограмму VINIT имеет массив /Ubound(VINIT)>0/ - 3 вариант расчета
Код: Выделить всё
    call filter(b,a,x,y) ' 1 вариант
    call filter(b,a,x,y,z) ' 2 вариант (z - внутренний массив подпрограммы)
    call filter(b,a,x,y,z,znew) ' 3 вариант (z - инициализирующий массив; znew - новое состояние подпрограммы)


Проблема состоит в том, что переменная DATA всегда имеет статус Nothing при работе в среде VB.NET; при вызове функции из VB6 - все отлично срабатывает. В чем дело?

Код: Выделить всё
    Public Sub FILTER(ByRef NUM As Double(), ByRef DEN As Double(), ByRef X As Double(), ByRef Y As Double(), Optional ByRef VINIT As Object = Nothing, Optional ByVal VOUT As Object = Nothing)
...
        If VINIT IsNot Nothing Then
            ' Задан вектор начального состояния фильтра
            NV = UBound(VINIT)
            ' Определить выходной массив VOUT
            isVIN = True
            ...
        ElseIf VOUT IsNot Nothing Then
            ' Задан вектор начального состояния фильтра
            If ArrayExist(VOUT) Then
                NV = UBound(VOUT)
            Else
                ' Определить выходной массив VOUT
                isVIN = True
                ...
            End If
        End If
...
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.03.2006 (Вс) 5:47

Здесь нет переменной DATA.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 19.03.2006 (Вс) 11:40

В .NET это делается примерно так:
Код: Выделить всё
    Public Sub FILTER(ByRef NUM As Integer(), ByRef DEN As Integer(), ByRef X As Integer(), ByRef Y As Integer(), Optional ByRef VINIT As Object = Nothing, Optional ByVal VOUT As Object = Nothing)

        If (VINIT IsNot Nothing) AndAlso VINIT.GetType.IsArray Then
            ' Задан вектор начального состояния фильтра
            Nv = CType(VINIT, Array).GetUpperBound(0)
            'If Nv < 0 Then .....????


        ElseIf (VOUT IsNot Nothing) AndAlso VOUT.GetType.IsArray Then
            ' Задан вектор начального состояния фильтра
            Nv = CType(VINIT, Array).GetUpperBound(0)
            'If Nv < 0 Then .....???
        End If

    End Sub


значение Nothing: скорее всего ты обьявил массив
Код: Выделить всё
Dim VINIT() As Integer

но не инициализировал его
Код: Выделить всё
VINIT= New Integer() {1, 2, 3}
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97

    TopList