Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VB.Net 2005

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Neoromantic



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Только начал изучать vb.net (VS.Net 2005 Beta) наткнулся на такой код:
 
Sub Main()
        Dim str() As Integer, intX As Integer
        str() = System.IO.Directory.GetLogicalDrives
        For intX = 0 To str.Length - 1
            Console.WriteLine(str(intX))
        Next
 
End Sub
 
в месте Dim str() возникает ошибка: Number of indices is less than the number of dimensions of the indexed array  
 
Как подолеть ее не знаю. Помогите кто может. Код взят из книги по VB.Net 2003

Всего записей: 1275 | Зарегистр. 15-01-2004 | Отправлено: 20:13 14-07-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
str()
- кажеться функция такая есть - поэтому и ругается


----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 20:46 14-07-2005
Neoromantic



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
переименовал, но результат тот же

Всего записей: 1275 | Зарегистр. 15-01-2004 | Отправлено: 21:15 14-07-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Neoromantic
А размер массива кажеться указывать в скобочках надо.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 21:30 14-07-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Neoromantic
Надо сразу указывать сколько элементом массива. Если неизвестно точно, то можно указать хотя бы один, а затем использовать ReDim() позже.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 23:57 14-07-2005 | Исправлено: dneprcomp, 00:03 15-07-2005
Neoromantic



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А разве нет понятия "Динамические массивы"???
 
"...Динамический массив создается, если точно не указан его размер во время его объявления. Для лучшего понимания этого рассмотрим следующий пример:
Dim Cand_name() as String""

Всего записей: 1275 | Зарегистр. 15-01-2004 | Отправлено: 00:31 15-07-2005
Neoromantic



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Кто нибудь может написать рабочий код для примера?

Всего записей: 1275 | Зарегистр. 15-01-2004 | Отправлено: 17:21 15-07-2005
z2Rus

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Во-первых, если код взят из книги VB.Net 2003, то подразумевается использование именно VB 2003 т.е. Microsoft Visual Studio 2003, а не 2005, в 2005-й версия языка 2.0
Но тем не менее проблма здесь не в этом.
 
1. Ты вообще видел что возвращает вызов System.IO.Directory.GetLogicalDrives ?
Возвращает он массив строк, а у тебя массив str объявлен как массив целых
Dim str() As Integer
 
2. Кто так пишет  
str() =  
Конечно может в VS2005 это правильный синтаксис, но я сомневаюсь.
 
Правильный код который работает под VS2003 выглядит так и никак иначе.
         
Dim str() As String, intX As Integer
str = System.IO.Directory.GetLogicalDrives
 
For intX = 0 To str.Length - 1
     Console.WriteLine(str(intX))
Next
 

Всего записей: 14 | Зарегистр. 01-09-2004 | Отправлено: 18:29 17-07-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
z2Rus
По моему, .NET все же требует явной инициализации массивов
Dim Month(11) As Integer   ' Reserves 12 elements -- (0) through (11).
Dim Month() As Integer = New Integer(11) {}
 

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 22:00 18-07-2005
z2Rus

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
По моему, .NET все же требует явной инициализации массивов

 
Так да не так.
Специально взял первую попавшуюся книжку по .NET и нашел раздел по массивам.
Код будет на С#, но это сути не меняет.
 
Дословная цитата:
Цитата:
 
Однако в любом случае для создания масива фиксированного размера мы должны использовать ключевое слово new. Такое объявление массива приведет в ошибке комилятора:
 
int[4] ages = {30, 54, 4, 10};                //Ошибка!
 
Помните, что размер массива задается при его создании, но не объявлении. Если мы объявляем массив фиксированного начального размера, мы обязаны использовать ключевое слово new. Но если мы возлагаем обязанность по определению необходимого размера на компилятор, можно обойтись и без new:
 
//Будет автоматически создан массив с 4 элементами. Обратите внимание наотсутствие //ключевого слова new и на пустые квадратные скобки
 
int[] ages = {20, 22, 23, 0};
 

 
Если кому интересно книга называется C# и платформа .NET автор Эндрю Троелсен (стр. 119-120)
 

Всего записей: 14 | Зарегистр. 01-09-2004 | Отправлено: 01:35 19-07-2005
Neoromantic



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо всем кто помог.
Теперь для наилучшего вида сработало:
 
Dim str() As String, intX As Integer
        str = System.IO.Directory.GetLogicalDrives
        For intX = 0 To str.Length - 1
            TextBox1.Text = TextBox1.Text & (str(intX)) & Chr(13) & Chr(10)
        Next
 
Еще раз благодарю...

Всего записей: 1275 | Зарегистр. 15-01-2004 | Отправлено: 16:55 20-07-2005
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VB.Net 2005


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru