0

我正在尝试在这里打印出一个数组/集合。我有一个带有以下代码的类文件来打印出文本:

//Display All
    public void Display()
    {
        Console.WriteLine(ID + "\t" + Product + "\t" + Category + "\t" + Price + "\t" + Stock + "\t" + InBasket);
    }

然后,我主要尝试使用以下方法将其实际打印到屏幕上:

foreach (KeyValuePair<int, Farm_Shop> temp in products)
        {
            //display each product to console by using Display method in Farm Shop class
            temp.Display();
        }

但是我收到以下错误:

'System.Collections.Generic.KeyValuePair<int,Farm_Shop_Assignment.Farm_Shop>' 
does not contain a definition for 'Display' and no extension method 'Display'
accepting a first argument of type 
'System.Collections.Generic.KeyValuePair<int,Farm_Shop_Assignment.Farm_Shop>' 
could be found (are you missing a using directive or an assembly reference?)

这是我要打印的实际内容:

products = new Dictionary<int, Farm_Shop>
        {
            { 1, new Farm_Shop(1, "Apple", "Fruit\t", 0.49, 40, 'n') },
            { 2, new Farm_Shop(2, "Orange", "Fruit\t", 0.59, 35, 'n') }
        };

据我了解,这不起作用,因为我只是发送要打印的数组/集合,而不是要打印的 int,如果您知道我的意思的话。

有人可以告诉我如何让它正确打印。

非常感激。谢谢。

4

4 回答 4

6

Display()是一种方法Farm_Shop。您不能直接在 type 的对象上调用它KeyValuePair<int, Farm_Shop>。您应该这样做以访问键/值对Farm_Shop中的实例:

foreach (KeyValuePair<int, Farm_Shop> temp in products)
    {
        //display each product to console by using Display method in Farm Shop class
        temp.Value.Display();
    }

或遍历该Values属性,因为该键不会为您增加太多(因为它来自 上的属性Farm_Shop

foreach (Farm_Shop temp in products.Values)
    {
        //display each product to console by using Display method in Farm Shop class
        temp.Display();
    }
于 2013-10-28T18:41:22.217 回答
0

这将遍历字典中的每个 KeyValue 对,并为您获取每个 jey 的值

foreach (KeyValuePairtemp in products) //遍历字典 { Console.WriteLine(temp.Value); }

于 2013-10-28T18:48:07.863 回答
0

它应该读到类似

foreach (var product in products)
{
  product.Value.Display();
}

现在您可以通过这种方式使您的 Display 方法更易于理解:

public Display()
{
   var out=String.Format("{1}\t{2}\t{3}\t{4}\t{5}",_id,_productName,_categoryName,_this,_that [...]);
   Console.WriteLine(out);
}
于 2013-10-28T18:49:28.923 回答
0

您可以覆盖对象的 .ToString() 方法并调用它,而不是创建 Display 方法。然后在你的循环中你可以这样做:

foreach(Farm_Shop item in products.Values)
{
    Console.WriteLine(item.ToString());
}
于 2019-02-16T16:18:49.557 回答