我有一点问题,在我的源代码中我不明白为什么我的ToUpload方法在Console窗口中给我一个额外的console.writeLine。 (写出啤酒对象)
当我调用ToUpload方法,并且啤酒在啤酒词典中时,它会给我一个额外的Console.WriteLine,在那里写出控制台上的啤酒对象。我不知道为什么。
这是我的输出:
我希望如此:
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;
}
}
答案 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会根据是否以这种方式访问密钥而自动更新或添加到字典中。