如何通过linkedlist正确显示我的对象(如果它有一些参数)
本文关键字:如果 参数 对象 linkedlist 何通过 我的 显示 | 更新日期: 2023-09-27 18:20:40
我是C#的新手,我需要一些关于我的任务的帮助。首先,我必须显示一个链表,其中包含一个名为Parcel
的对象和那个Parcel
包含几个参数int id
、string name
、int weight
。当试图调用一个函数来显示linkedlist中的任何内容时,我得到了一个错误。
这是我的DisplayInventory()
函数:
public void DisplayInventory()
{
for (Node j = head; j != null; j = j.Link )
{
Console.WriteLine(j.Data);
}
}
这是我的包裹等级:
class Parcel
private int id;
private String customerName;
private int weight;
public Parcel(int id, String customerName, int weight)
{
this.id = id;
this.customerName = customerName;
this.weight = weight;
}
public int ID
{
get { return id; }
set { id = value; }
}
public String CustomerName
{
get { return customerName; }
set { customerName = value; }
}
public int Weight
{
get { return weight; }
set { weight = value; }
}
}
这是我的节点类:
class Node
{
private object data;
public object Data
{
get { return data; }
set { data = value; }
}
private Node link;
internal Node Link
{
get { return link; }
set { link = value; }
}
public Node(object d)
{
this.data = d;
}
}
除了在linkedlist.cs中找到的DisplayInventory()函数外,一切都很好。当我试图打印它时,它只显示了AppName.Parcel
,我知道我必须转换我的j.data,但它对我不起作用,有什么帮助吗?非常感谢。
您应该打印每个属性:
Console.WriteLine("Id: " + j.Data.Id.ToString());
Console.WriteLine("Name: " + j.Data.Name);
等等。
您可以为Parcel
类的每个字段/属性调用Console.WriteLine()
,或者覆盖它的ToString()
方法。看起来是这样的:
public class Parcel()
{
public override string ToString()
{
string str = ....// create here your string representation of Parcel
// if number of fileds is quite big use StringBuilder class
return str;
}
}
Console.WriteLine
将在j.Data
对象上调用object.ToString()
,默认情况下只返回类型名称(Parcel)。
我假设DisplayInventory
在实现链表的类中——在这种情况下,您应该能够直接引用类的属性:
例如
Console.WriteLine(j.Id);
您也可以通过将j
(Parcel)添加到源中来覆盖ToString
:
public override string ToString() { return this.Id.ToString(); }
编辑:
好的,根据您的更新,您可以将Node.Data
(j.Data)投射到Parcel并直接访问成员:
for (Node j = head; j != null; j = j.Link )
{
// Cast using the as keyword - if the cast fails, parcel will be null, otherwise it will be the casted object
var parcel = j.Data as Parcel;
// Check if parcel is null, if not write some info
if(parcel != null)
{
Console.WriteLine(parcel.Id);
Console.WriteLine(parcel.CustomerName); // etc
}
}
或者,只需使用j.Data.ToString()
,并确保您已覆盖Parcel
的ToString
成员
例如在Parcel.cs
中
// Override the ToString method. If you are using Visual Studio you should get a popup
// telling you which methods you can override after you type override then hit space
public override string ToString()
{
// string.format is one way of formatting the data, the tokens are replaced by the indexed arguments
return string.Format("{0} - {1}", Id, CustomerName);
}