我一直在尝试将一个类添加到我的LinkedList
中,但是当我显示所有内容时,我一直收到0
。或者我收到错误消息,说我无法将class
转换为int
。请帮帮我。
我正在尝试创建一个程序,我可以将书籍输入LinkedList
,然后将列表全部显示出来。我将显示3个文件“Program.cs”,“LinkedList.cs”和“Node.cs”,我将保留我的“Item.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();
}
}
}
这是我的LinkedList.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;
}
}
}
最后这是我的node.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
}
}
答案 0 :(得分:1)
在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
,这就是您遇到此错误的原因。
答案 1 :(得分:1)
我知道您已经接受了答案,但如果您正在寻找创建自己的链接列表实现,我是否可以建议您使用泛型来允许您将代码用于任何数据类型?
如果您修改了LinkedList以使其成为LinkedList< T>:
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;
}
}
}
您的节点到节点&lt; T&gt;:
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&lt;项目&gt; ...&#39;项目&#39;的链接列表对象。
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代码分离。
答案 2 :(得分:0)
对于编译器错误:您尝试将Item
分配给int
,这将无法正常工作。
您可以使用以下内容替换private int data [...] public int Data
部分和构造函数:
public Item Data { get; set; }
public Node(BookApp.Item item)
{
Data = item;
}
至于为什么DisplayAll()
返回0
,您必须自己调试此问题。
答案 3 :(得分:0)
你得到那个错误是正常的,变量p是Item的类型。你不能将类型Item转换为int。您的Data变量必须是Item变量。