C# 在链接列表中使用类

本文关键字:列表 链接 | 更新日期: 2023-09-27 18:35:07

我一直在尝试将一个类添加到我的LinkedList中,但是当我显示所有时,我一直0。要么这样,要么我收到错误,说我无法将class转换为int。请帮帮我。

我正在尝试制作一个程序,我可以在其中将书籍输入LinkedList,然后使列表显示所有内容。我将显示 3 个文件"程序.cs"、"链接列表.cs"和"节点.cs",我将省略我的"项目.cs",因为我认为这不是导致错误的文件。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BookApp
{
    class Program
{
        static void Main(string[] args)
        {
            LinkedList Books = new LinkedList();
            Item book1 = new Item(101, "Avatar: Legend of Korra", 13.50);
            Item book2 = new Item(102, "Avatar: Legend of Aang", 10.60);
            Books.AddFront(book1);
            Books.AddFront(book2);
            Books.DisplayAll();
        }
    }
}

这是我的链表.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BookApp;
class LinkedList
{
    private Node head;  // 1st node in the linked list
    private int count;
    public int Count
    {
        get { return count; }
        set { count = value; }
    }
    public Node Head
    {
        get { return head; }
    }
    public LinkedList()
    {
        head = null;    // creates an empty linked list
        count = 0;
    }
    public void AddFront(Item z)
    {
        Node newNode = new Node(z);
        newNode.Link = head;
        head = newNode;
        count++;
    }
    public void DeleteFront()
    {
        if (count > 0)
        {
            head = head.Link;
            count--;
        }
    }
    public void DisplayAll()
    {
        Node current = head;
        while (current != null)
        {
            Console.WriteLine(current.Data);
            current = current.Link;
        }
    }
}

最后是我的节点.cs

class Node
{
    private int data;
    public int Data
    {
        get { return data; }
        set { data = value; }
    }
    private Node link;
    private BookApp.Item p;
    internal Node Link
    {
        get { return link; }
        set { link = value; }
    }
    public Node(BookApp.Item p)
    {
        // TODO: Complete member initialization
        this.data = p; //Where I got my error about how I cannot convert type BookApp.Item to int
    }
}

C# 在链接列表中使用类

node.cs尝试替换:

private int data;
public int Data
{
    get { return data; }
    set { data = value; }
}

由:

private BookApp.Item data;
public BookApp.Item Data
{
    get { return data; }
    set { data = value; }
}

您无法将Item分配给integer,这就是您遇到此错误的原因。

我知道

你已经接受了答案,但是如果你想创建自己的链表实现,我能建议你使用泛型来允许你使用任何数据类型的代码吗?

如果您修改了 LinkedList 以使其成为 LinkedList

using System.Linq;
using System.Text;
using System.Threading.Tasks;
class LinkedList<T>
{
    private Node<T> head;  // 1st node in the linked list
    private int count;
    public int Count
    {
        get { return count; }
        set { count = value; }
    }
    public Node<T> Head
    {
        get { return head; }
    }
    public LinkedList<T>()
    {
        head = null;    // creates an empty linked list
        count = 0;
    }
    public void AddFront(T z)
    {
        Node<T> newNode = new Node<T>(z);
        newNode.Link = head;
        head = newNode;
        count++;
    }
    public void DeleteFront()
    {
        if (count > 0)
        {
            head = head.Link;
            count--;
        }
    }
    public void DisplayAll()
    {
        Node<T> current = head;
        while (current != null)
        {
            Console.WriteLine(current.Data);
            current = current.Link;
        }
    }
}

而您的节点到节点

class Node<T>
{
    private T data;
    public T Data
    {
        get { return data; }
        set { data = value; }
    }
    private Node<T> link;
    internal Node<T> Link
    {
        get { return link; }
        set { link = value; }
    }
    public Node<T>(T p)
    {
        data = p; 
    }
}

然后,您可以在代码中像这样使用它,方法是创建一个 LinkedList..."项目"对象的链接列表。

class Program
{
        static void Main(string[] args)
        {
            LinkedList<Item> Books = new LinkedList<Item>();
            Item book1 = new Item(101, "Avatar: Legend of Korra", 13.50);
            Item book2 = new Item(102, "Avatar: Legend of Aang", 10.60);
            Books.AddFront(book1);
            Books.AddFront(book2);
            Books.DisplayAll();
        }
}

这种方法的好处是,只需对原始代码进行非常小的更改,您的 LinkedList 现在可以保存任何类型的对象 - 但仍然是强类型。它还将 LinkedList 和 Node 实现与 BookApp 代码分离。

对于编译器错误:您正在尝试将Item断言到int,这将不起作用。

可以将 private int data [...] public int Data 部件和构造函数替换为以下内容:

public Item Data { get; set; }
public Node(BookApp.Item item)
{
    Data = item;
}

至于为什么DisplayAll()返回0,你必须自己调试问题。

你得到这个错误是正常的,变量p是项目的类型。不能将 Item 类型隐式转换为 int。您的数据变量必须是项目变量。