VB.Net NullReferenceException

VB.Net NullReferenceException,vb.net,Vb.net,在“如果aryTemp(1)

在“如果aryTemp(1) 索引超出了 数组

出现错误。不明白为什么会超出数组的界限。 基本上是尝试比较姓氏来对记录进行排序,并将它们放回列表框中

 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
Private Sub btnAscending\u Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnAscending。单击
'将所有学生加载到数组中
按字符串排序(numberOfRecords)
Dim aryTemp(6)作为字符串
Dim aryTemp2(6)作为字符串
对于i=0到numberOfRecords-1
arySort(i)=lstListBox.Items(i)
下一个
Dim temp As字符串“保存临时记录”
将k变为整数
对于i=0到arySort.Length-2
aryTemp=拆分(arySort(i),“”)
对于k=i+1到arySort.Length-1
aryTemp2=Split(arySort(k),“”)
如果aryTemp(1)
好吧,
arySort
lstListBox
都是
什么都没有
,但是如果没有更多的代码,我就说不出来了。调试器可能会有所帮助。

A说明了一切

尝试取消引用空对象引用时引发的异常

这意味着您正试图访问一个实际上尚未赋值的变量,或者未赋值。对于类对象,这意味着您的对象没有实例化

对于
列表框
,如果它是
,则需要实例化它

对于数组
arySort
,您是否初始化了它,或者它仍然是
Nothing

当您面临这样一个NullReferenceException时,问问自己是否拥有所有预期的初始化和实例化。当一个变量不应该是
Nothing
时,问问自己为什么是这样。对自己的提问很可能会引导你正确地解决问题

另一个好的做法是在尝试访问变量之前验证变量是否为
Nothing

编辑#1

索引超出了数组的边界

这是一个

尝试访问索引超出数组边界的数组元素时引发的异常。该类不能被继承

每当试图访问实际超出其长度的数组索引时,就会引发此异常

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());     
}

总结一下,你总是要考虑一个基于零的索引,即数组长度-1。

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

谢谢你提供的信息(我会记得的),我已经找到了解决方案。新问题仍然是个问题,明白了。新问题已发布,而不是原来的问题。请不要这样做。为一个新问题发布一个新问题。你的代码在哪里抛出的更准确?从什么时候开始,你可以在VB.NET中分配一个数组而不使用
new
关键字?正确的语法不是新字符串(6),还是我在这里遗漏了什么?
for (int index = 0; index < objects.Length; i++)
    Console.WrilteLine(object[index]);
1
2
3