C# 在表单中创建双链接列表时出错

C# 在表单中创建双链接列表时出错,c#,C#,我是C#的新手,我正在尝试创建一个循序渐进的程序,该程序将创建和显示双链接列表的节点。我将展示到目前为止我所拥有的: 这是表单的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tas

我是C#的新手,我正在尝试创建一个循序渐进的程序,该程序将创建和显示双链接列表的节点。我将展示到目前为止我所拥有的:

这是表单的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Pruebapila2
{

    public partial class Form1 : Form
    {
        DbLinList infoTask;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            infoTask = new DbLinList();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            taskToDo vInfo = new taskToDo(int.Parse(textBox1.Text), textBox4.Text, textBox2.Text, textBox5.Text, textBox3.Text);
            infoTask.insertAtTheEnd(vInfo);
            listBox1.Items.Add("Data Added: "+ vInfo.id + " - " + vInfo.name + " - " + vInfo.length + " - " + vInfo.percentage + " - " + vInfo.programmer);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            Node n;

            n = infoTask.firstNode;
            while (n != null)
            {
                listBox1.Items.Add(Convert.ToString(n.info.id) + "\t" + n.info.name + "\t" + n.info.length);
                n = n.Next;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            Node n;

            n = infoTask.firstNode;
            while (n != null)
            {
                if (n.info.id == int.Parse(textBox6.Text))
                listBox1.Items.Add(Convert.ToString(n.info.id) + "\t" + n.info.name + "\t" + n.info.length);
                n = n.Next;
            }
        }
    }
}
当您单击表单的第一个按钮时,它会将数据插入到一个节点中,该节点属于一个双链接列表,因此下面是列表的代码。cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pruebapila2
{
    class DbLinList
    {
        public Node firstNode;

        public DbLinList()
        {
            firstNode = null;
        }

        public DbLinList insertAtTheEnd(taskToDo vTaskToDo)
        {
            Node newNode;
            newNode = new Node(vTaskToDo);
            newNode.Next = firstNode;
            newNode.Prev = firstNode.Next;
            firstNode = newNode;
            return this;
        }
    }
}
此列表使用的节点具有指向上一个节点的链接和指向列表中下一个节点的链接。以下是节点的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pruebapila2
{
    class Node
    {
        public taskToDo info;
        public Node Next;
        public Node Prev;

        public Node(taskToDo vInfo)
        {
            info = vInfo;
            Next = null;
            Prev = null;
        }
    }
}
该节点是可重用的,因为它可以包含任何类型的信息,甚至是信息的几个部分,但在本例中,该节点将包含程序员必须执行的任务的信息,因此我创建了一个tasks.cs文件,其中将包含我们需要存储在列表中的信息。代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pruebapila2
{
    class taskToDo
    {
            public int id;
            public string name;
            public string length;
            public string percentage;
            public string programmer;

            public taskToDo(int vID, String vName, String vLength, String vPercentage, String vProgrammer)
            {
                id = vID;
                name = vName;
                length = vLength;
                percentage = vPercentage;
                programmer = vProgrammer;
        }

    }
}
代码没有显示任何错误和警告,当执行时,它显示错误:“DoubleLinkedTest.exe中发生了类型为'System.NullReferenceException'的未处理异常。”但我不知道为什么会出现此错误

这里的逻辑如下:按钮将数据发送到列表,列表创建一个新节点,节点创建一个新任务,信息存储在节点中

谁能告诉我代码出了什么问题,为什么不起作用?。2号和3号按钮的功能目前没有问题

这是表单的外观:


非常感谢你在这方面的帮助

您使用的是
firstNode
,但从未将其设置为
null
——因此出现了
NullReferenceException
。如果你只使用调试器,你会一目了然。简而言之,您的代码是非常错误的,您需要重新思考您在做什么。构造函数以
null
的形式启动
firstNode
,但是当调用函数时,firstNode不再是
null
仅仅说你的代码是非常错误的并不能真正帮助你去哪里修复它…学会使用调试器-这是一个你会在半秒钟内在调试器中看到的小问题。真的<代码>第一个节点。在
inserttheend
中分配
firstNode
之前,可以访问下一个
。关于“学会使用调试器”的任何进一步信息?。这是一个模糊的答案,并没有指出如何修复代码的方向。