2覆盖多个类的ToString()方法

时间:2018-05-19 03:25:37

标签: c#

这就是我的代码:

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;
    }
}

这是我的Item类:

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(),所以不会删除其中一个不幸。

1 个答案:

答案 0 :(得分:0)

它正在返回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"