首页 > 解决方案 > 2 跨多个类覆盖 ToString() 方法

问题描述

这就是我的代码的样子:

public class Inventory 
{

    private List<Item> list = new List<Item>();

    public List<Item> list { get; set; }

    public Inventory()
    {
        list = new List<Item>()
        {
            new Item("iPod"),
            new Item("Motorolla"),
            new Item("Samsung"),
            new Item("Nokia")
        };
    }

    public override String ToString() 
    {
        String stuff = null;

        for (int i = 0; i < list.Count; i++)
        {
            Item items = list[i];
            stuff += items.ToString();
        }

        return name + stuff;
    }
}

这是我的项目类:

public class Item
{
    public override String ToString() => ProductCost().ToString();
}

在我的 Form.cs 下:

private void Form1_Load(object sender, EventArgs e)
{
    var products = new Inventory();
    lstBox.Items.Add(products);     // Display products     
}

我的问题不是返回"name + stuff",而是返回我感到困惑的“ProductCost”,因为我已经初始化了一个 Inventory 对象——它不应该调用被覆盖的ToString()方法Inventory而不是我在 Item.cs 中的方法吗?

注意:我需要同时ToString()实现两者,所以不,不幸的是删除其中一个不会飞。

标签: c#

解决方案


它正在返回Item.ToString(),因为您在调用它时调用它stuff += items.ToString();

相反,只需执行以下操作:

string stuff = "Items: ";

for (int i = 0; i < list.Count; i++)
{
    Item items = list[i];
    stuff += items.Name + ", ";
}

// Remove the last comma
stuff = stuff.Substring(0, s.LastIndexOf(", "));
return name + stuff;

如果我们不删除最后一个逗号,我们会得到:

"Items: Ipod, Motorolla, Samsung, Nokia, "

代替:

"Items: Ipod, Motorolla, Samsung, Nokia"

推荐阅读