2010-11-29 3 views
-2

В строке `Если aryTemp (1) < aryTemp2 (1) Затем индексVB.Net NullReferenceException

находился вне границ этого массива.

ошибка появляется. Не могу понять, почему это будет за пределами границ массива. В основном пытается сравнить последние имена, чтобы отсортировать записи и поместить их обратно в список.

Private Sub btnAscending_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAscending.Click 
     'load all students into array 
     Dim arySort(numberOfRecords) As String 
     Dim aryTemp(6) As String 
     Dim aryTemp2(6) As String 
     For i = 0 To numberOfRecords - 1 
      arySort(i) = lstListBox.Items(i) 
     Next 
     Dim temp As String 'holds temporary record 
     Dim k As Integer 
     For i = 0 To arySort.Length - 2 
      aryTemp = Split(arySort(i), " ") 
      For k = i + 1 To arySort.Length - 1 
       aryTemp2 = Split(arySort(k), " ") 
       If aryTemp(1) < aryTemp2(1) Then 
        temp = arySort(k) 
        arySort(k) = arySort(i) 
        arySort(i) = temp 
       End If 
      Next 
     Next 
     lstListBox.Items.Clear() 
     numberOfRecords = 0 
     isLoaded = False 
     For i = 0 To arySort.Length - 1 
      lstListBox.Items.Add(arySort(i)) 
      numberOfRecords += 1 
     Next 
     currentRecord = 0 
     isLoaded = True 
    End Sub 
+0

Адрес, если ваш код отличается точностью? – 2010-11-29 23:45:18

+0

С каких пор вы можете выделить массив в VB.NET без ключевого слова `New`? Разве это не правильный синтаксис `Dim aryTemp as New String (6)`, или я чего-то здесь не вижу? – ja72 2010-11-29 23:55:21

ответ

1

Ну, либо arySort или lstListBox является Nothing, но без некоторой больше коды, я не могу сказать. Отладчик может помочь.

+0

Получил это. Новая проблема отправляется вместо исходного вопроса. – JohnnyCake 2010-11-29 20:40:21

0

A NullReferenceException говорит все.

Исключение, возникающее при попытке разыменовать ссылку на нулевой объект.

Это означает, что вы пытаетесь получить доступ к переменной, которой на самом деле еще не присвоено значение, или присвоено значение Nothing. В случае объекта класса это означает, что ваш объект не создается.

В случае вашего ListBox необходимо создать экземпляр, если это Nothing;

В случае вашего массива arySort, вы его инициализировали, или это все еще Nothing?

Когда вы сталкиваетесь с таким обходом NullReferenceException, спросите себя, есть ли у вас все ожидаемые инициализации и экземпляры. Когда переменная Nothing, когда этого не должно быть, спросите себя, почему это так. Этот опрос о себе, скорее всего, поможет вам решить правильное решение проблемы.

Еще одна хорошая практика - проверить, является ли переменная Nothing, прежде чем пытаться получить к ней доступ.

EDIT # 1

Индекс находился вне границ массива.

Это IndexOutOfRangeException.

Исключение, которое возникает при попытке получить доступ к элементу массива с индексом, который находится за пределами массива. Этот класс не может быть унаследован.

Это исключение возникает при попытке получить доступ к индексу массива, который фактически находится за пределами его длины.

object[] objects = new object() { 1, 2, 3 }; 

for (int index = 0; index <= objects.Length; index++) { 
    // The following line will throw an `IndexOutOfRangeException` when index = objects.Length 
    Console.WriteLine(objects[index].ToString());  
} 

Потому что.NET массивы и коллекции основаны на нулевом значении, то есть первый индекс массива или коллекции равен 0, пытаясь получить доступ к индексу, стоящему на длине массива, может вывести его из строя. На самом деле длина массива объектов равна 3. Кроме того, доступ к objects[3] будет бросать, поскольку 3 - его длина, а не ее верхняя граница.

Это говорит:

objects[0]; // This will return the object value of 1, the first value placed in the array. 
objects[1]; // This will return the object value of 2, the second value placed in the array. 
objects[2]; // This will return the object value of 3, the thrid value placed in the array. 
objects[3]; // Throws the `IndexOutOfRangeException` here, 
      // as there is no value stored at this index, hance this index doesn't even exist 
      // in the array! 

Подводя итог, вы всегда должны учитывать индекс с отсчетом от нуля, то есть, длина массива - 1.

for (int index = 0; index < objects.Length; i++) 
    Console.WrilteLine(object[index]); 

Какой выход будет :

1 
2 
3 
Смежные вопросы