C#方法给我一个额外的Console.WriteLine

时间:2011-11-29 13:50:34

标签: c# methods console

我有一点问题,在我的源代码中我不明白为什么我的ToUpload方法在Console窗口中给我一个额外的console.writeLine。 (写出啤酒对象)

当我调用ToUpload方法,并且啤酒在啤酒词典中时,它会给我一个额外的Console.WriteLine,在那里写出控制台上的啤酒对象。我不知道为什么。

这是我的输出:

  • Borsodosör1604.6 1000
  • Pilsner Urquell 250 4.4 800
  • SoproniÁszok150,4.5900
  • Dreher Classic 200,5.2 600
  • 125
  • Borsodosör1604.6 475
  • Pilsner Urquell 250 4.4 800
  • SoproniÁszok150,4.51350
  • Dreher Classic 200,5.2 600
  • Bratisosör,230,4.5 300
  • SoproniÁszok150,4.5450 //这是额外的
  • Borsodosör1604.6 100 //这是

我希望如此:

  • Borsodosör1604.6 1000
  • Pilsner Urquell 250 4.4 800
  • SoproniÁszok150,4.5900
  • Dreher Classic 200,5.2 600
  • 125
  • Borsodosör1604.6 475
  • Pilsner Urquell 250 4.4 800
  • SoproniÁszok150,4.51350
  • Dreher Classic 200,5.2 600
  • Bratisosör,230,4.5 300

    public void ToUpload(Beer beer, int dl)
    {
        int d = 0;
        Beer s = null;
        // search for beer in beers dictionary
        foreach (var item in beers)
        {
            if (item.Key.Equals(beer))
            {
                d = item.Value;
                s = item.Key;
            }
        }
        // if this beer in the beers, update the value
        if (s != null)
        {
            beers[s] = d + dl;
        }
        // if a new beer, just add to beers
        beers.Add(beer, dl); // IDictionary beers = new Dictionary
    }
    
    public Pub()
    {
        ToUpload(new Beer("Borsodi beer", 160, 4.6), 1000);
        ToUpload(new Beer("Pilsner Urquell", 250, 4.4), 800);
        ToUpload(new Beer("Soproni Ászok", 150, 4.5), 900);
        ToUpload(new Beer("Dreher Classic", 200, 5.2), 600);
    }
    
    static void Main(String[] args)
    {
        Beer b = new Beer("Borsodi beer", 160, 4.6);
        Beer c = new Beer("Bratista beer", 230, 4.5);
        Beer d = new Beer("Soproni Ászok", 150, 4.5);
        Pub pub = new Pub();
        foreach (var item in pub.beers)
        {
            Console.WriteLine("{0} {1}", item.Key, item.Value);
    
        }
    
    
        Console.WriteLine(pub.Elad("Borsodi beer", 125));
    
    
        //pub.ToUpload(b, 2000);
        pub.ToUpload(c, 300); // Don't Write out this beer object
        pub.ToUpload(d, 450); // Write out this beer object the console
        pub.ToUpload(b, 100); // Write out this beer object the console
    
    
    
        foreach (var item in pub.beers)
        {
            Console.WriteLine("{0} {1}", item.Key, item.Value);
    
        }
    
        Console.ReadLine();
    

以下是Beer类:

public class Beer
{
    string name;
    int price; 
double alcohol;

public string Name { get { return name; } }

public int Price{ get; set; }

public double AlkoholTartalom { get { return alcohol; } }

public Beer(string name, int price, double alcohol)
{
    // ide írja a kódot
    this.name = name;
    this.price = price;
    this.alcohol = alcohol;
}

public override bool Equals(object obj)
{
    if (obj is Beer)
    {
        Beer other = (Beer)obj;
        return this.name == other.name;
    }
    return false;
}

public override string ToString()
{
    return this.Name + " " + this.Price+ " " + this.AlkoholTartalom;
}
}

2 个答案:

答案 0 :(得分:2)

您在ToUpload方法中缺少“Else”。

// if this beer in the beers, update the value
if (s != null)
{
    beers[s] = d + dl;
}
else  // Add this 
    beers.Add(beer, dl); // IDictionary beers = new Dictionary

从我看到的,这应该解决它。 你正在将啤酒添加到字典中,即使你应该更新它。

答案 1 :(得分:0)

根据啤酒的类型,您可以这样做:

public void ToUpload(Beer beer, int dl)
{
    int d = 0;
    if(beers[beer] != null)
        d = beers[beer];

    beers[beer] = d + dl;
}

我知道HashTables会根据是否以这种方式访问​​密钥而自动更新或添加到字典中。