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
}
}
在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。您的数据变量必须是项目变量。