Vb.Net проверка массива

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

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

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Vb.Net проверка массива

Сообщение Res5 » 23.12.2013 (Пн) 7:31

Собственно данноее условие без оn еrr проверяет имеет ли массив элементы.

Код: Выделить всё
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Arr() As Long
        Dim Arr1(20) As Long
        Dim Arr2() As Long



        If Arr Is Arr1 Then
        Else
            MsgBox("массив Arr1 c элементами")
        End If

        If Arr Is Arr2 Then
            MsgBox("массив Arr2 пуст")
        End If




    End Sub


псы ниче подобного не нашел.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Vb.Net проверка массива

Сообщение Хакер » 23.12.2013 (Пн) 8:29

Перенесено и раздела «Алгоритмы» в этот раздел, поскольку описанная информация не имеет алгоритмической составляющей и ценности.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Vb.Net проверка массива

Сообщение pronto » 23.12.2013 (Пн) 10:29

Здесь уже было такое где-то, лень искать источник. Проще достать из своих загашников... Но это для VB6, на .NET не проверял...
Код: Выделить всё
  Dim a() As Long 'Integer, String ...
 
  If (Not a) = -1 Then
     Debug.Print "массив не инициализирован"
  Else
     Debug.Print "массив инициализирован " & UBound(a)
  End If

  ReDim a(2)
 
  If (Not a) = -1 Then
     Debug.Print "массив не инициализирован"
  Else
     Debug.Print "массив инициализирован " & UBound(a)
  End If


PS После 15 минут поисков по сайту...
Как определить: пуст массив или нет?
Команда UBound
O, sancta simplicitas!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2013 (Пн) 12:07

Res5 писал(а):Собственно данноее условие без оn еrr проверяет имеет ли массив элементы.

Ничего не понял. И код тоже не понял. Такое ощущение, что это бред какой-то...

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Vb.Net проверка массива

Сообщение The trick » 23.12.2013 (Пн) 16:30

pronto писал(а):Здесь уже было такое где-то, лень искать источник. Проще достать из своих загашников... Но это для VB6, на .NET не проверял...

После такого кода потом возникают проблемы при работе с вещественными числами, проверяйте через VarPtr
Код: Выделить всё
Private Sub Form_Load()
    Dim s() As Long, b As Double, q As Double
   
    If Not Not s Then
        Debug.Print "Инициализирован"
    Else
        Debug.Print "Не Инициализирован"
    End If
   
    b = 1 + q   ' Баг? Где? Нажми F5 все нормально, дружище..
End Sub
UA6527P

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Vb.Net проверка массива

Сообщение pronto » 23.12.2013 (Пн) 17:04

Хм... Действительно. Раньше такого не замечал (хотя и код этот тоже не приходилось использовать). Себе запомнил, что лучше делать через VarPtr... Кто-нибудь знает причины такой странности?
O, sancta simplicitas!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Vb.Net проверка массива

Сообщение Viper » 23.12.2013 (Пн) 18:10

А arr.Length = 0не проще проверить?
Весь мир матрица, а мы в нем потоки байтов!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2013 (Пн) 18:14

Там где-то Nothing вроде...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Vb.Net проверка массива

Сообщение Viper » 23.12.2013 (Пн) 18:17

Qwertiy писал(а):Там где-то Nothing вроде...
Тогда сначала проверять на на Nothing, потом длину. А вообще надо проверить скорость работы предложенного метода.
Весь мир матрица, а мы в нем потоки байтов!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Vb.Net проверка массива

Сообщение The trick » 23.12.2013 (Пн) 18:24

Viper писал(а):А arr.Length = 0не проще проверить?

Если это мне адресовано, то я писал тот пост как ответ на
pronto писал(а):Но это для VB6
К VB.NET он никакого отношения не имеет.
UA6527P

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2013 (Пн) 18:28

Кривоус Анатолий писал(а):то я писал тот пост как ответ на
> Но это для VB6
К VB.NET он никакого отношения не имеет.

Я тоже про Nothing в VB6 писал.
Что за код тут для VB.NET - я вообще не понимаю.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Vb.Net проверка массива

Сообщение The trick » 23.12.2013 (Пн) 18:48

На Nothing нужно проверять объектные переменные. Массивы VB6 не объекты, поэтому проверка на Nothing некоректна и невозможна. Хотя это в принципе тоже самое, если я нечего не путаю. Result = ObjPtr(Obj), тоже самое что и GetMem4 ByVal VarPtr(Obj), Result; так и массив проверить можно GetMem4 ByVal ArrPtr(Ar), Result - тоже самое.
UA6527P

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2013 (Пн) 18:51

А если в Variant обернуть?
Ну тут была где-то тема про эти проверки...

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Vb.Net проверка массива

Сообщение The trick » 23.12.2013 (Пн) 19:03

Qwertiy писал(а):А если в Variant обернуть?
Что это даст? VarType = возвратит vbArray|vbLong (для Long массива)
UA6527P

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Vb.Net проверка массива

Сообщение Viper » 23.12.2013 (Пн) 21:45

В чем великий смысл обсуждения методики применяемой в VB6 в разделе по VB.NET?
Весь мир матрица, а мы в нем потоки байтов!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 24.12.2013 (Вт) 0:21

Viper писал(а):В чем великий смысл обсуждения методики применяемой в VB6 в разделе по VB.NET?

Ну пока кто-нибудь не расскажет, что за бред написан в первом посте, кроме методики для VB6 тут обсуждать нечего ;)

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Vb.Net проверка массива

Сообщение Res5 » 25.12.2013 (Ср) 7:49

Qwertiy писал(а):
Viper писал(а):В чем великий смысл обсуждения методики применяемой в VB6 в разделе по VB.NET?

Ну пока кто-нибудь не расскажет, что за бред написан в первом посте, кроме методики для VB6 тут обсуждать нечего ;)


Хм че тут бредового? Иногда может понадобитсья инфа пуст ли массив. На основе сравнения с Arr() получаеш инфу о нужном массиве.

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Vb.Net проверка массива

Сообщение Res5 » 25.12.2013 (Ср) 7:50

Определенно стоит првоерить скорость с on err и моим способом.

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Vb.Net проверка массива

Сообщение Res5 » 25.12.2013 (Ср) 7:52

Viper писал(а):А arr.Length = 0не проще проверить?

Компилятор ругается если в массиве не задана размерность "В экземпляре объекта не задана ссылка на объект."

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Vb.Net проверка массива

Сообщение alibek » 25.12.2013 (Ср) 8:28

Res5 писал(а):Иногда может понадобитсья инфа пуст ли массив.

Например?
Lasciate ogni speranza, voi ch'entrate.

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Vb.Net проверка массива

Сообщение Res5 » 25.12.2013 (Ср) 8:42

Например если распаковываеш данные.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Vb.Net проверка массива

Сообщение alibek » 25.12.2013 (Ср) 10:53

И для чего при этом знать, пустой массив или нет?
Lasciate ogni speranza, voi ch'entrate.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 25.12.2013 (Ср) 12:30

Res5 писал(а):Хм че тут бредового? Иногда может понадобитсья инфа пуст ли массив. На основе сравнения с Arr() получаеш инфу о нужном массиве.

Объясни прям по строчкам, что делает этот код. Затем, в каком случае его надо использовать и как? Это даже не функция проверки, а обработчик кнопки.

Res5 писал(а):"В экземпляре объекта не задана ссылка на объект."

Ну так Nothing же.

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Vb.Net проверка массива

Сообщение Res5 » 01.02.2014 (Сб) 17:36

Код: Выделить всё
    Private Function array_is_empty(ByVal Arr() As Integer) As Boolean

        Dim Arr1() As Integer

        If Arr Is Arr1 Then
            Return False
        Else
            Return True
        End If


    End Function

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 02.02.2014 (Вс) 22:15

Мне лень проверять. Это не то же самое?
Код: Выделить всё
Private Function Check(ByVal Arr() As Integer) As Boolean
  Return Arr IsNot Nothing
End Sub

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Vb.Net проверка массива

Сообщение Res5 » 02.02.2014 (Вс) 23:15

Тоже, запись другая просто.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 03.02.2014 (Пн) 0:45

Ну и зачем городить непонятную функцию, когда всё элементарно проверяется???

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Vb.Net проверка массива

Сообщение Res5 » 03.02.2014 (Пн) 17:11

Я незнал про существование IsNot и ранее проверял спомщью OnErr

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Vb.Net проверка массива

Сообщение Viper » 03.02.2014 (Пн) 19:45

Res5 писал(а):Я незнал про существование IsNot и ранее проверял спомщью OnErr
OnErr тоже наследство из vb6.0, надо пользоваться блокам Try Catch End Try
Весь мир матрица, а мы в нем потоки байтов!

strelec
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 28.02.2009 (Сб) 22:04

Re: Vb.Net проверка массива

Сообщение strelec » 06.03.2014 (Чт) 13:40

Код: Выделить всё
If Obj Is Nothing Then
может так? _)

След.

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

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

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

    TopList