Ich stolpere über ein Problem, und ich habe keine Ahnung, was ich falsch mache. Ich habe unzählige verschiedene Dinge ausprobiert, aber aus irgendeinem Grund wird es einfach nicht funktionieren. Meine Hauptschleife:Code iteriert nicht über das gesamte Wörterbuch?
static Dictionary<string, int> dict = new Dictionary<string, int>();
public static void IterateOverEachUser()
{
if (dict.Count > 0) {
foreach (KeyValuePair<string, int> item in dict.ToList())
{
string userName = item.Key;
int amountLeft = item.Value;
if(amountLeft == 60)
{
Log(userName + " started!");
}
Log(userName + amountLeft);
dict[userName] = dict[userName] - 1;
amountLeft = item.Value;
if(amountLeft == 0)
{
Log(userName + " ran out!");
}
}
}
}
public static void AddUser(string User)
{
if (dict.ContainsKey(User))
{
Log("User already exists.");
}
else
{
dict.Add(User,60);
Log("User has been added.");
}
}
Ich schleife IterateOverEachUser() alle 5 Sekunden. Wenn ich einen Benutzer mit der Methode hinzufüge, ist alles in Ordnung, aber wenn ich einen zweiten hinzufüge, bleibt sein Wert bei 60 hängen, während der andere weiterläuft.
Weiß jemand, warum das passiert? Ich komme aus Java mit HashMaps und mit dem gleichen Code funktioniert es wie beabsichtigt. (Das heißt: Jeder Benutzer wird iteriert, der Wert aller Benutzer wird um 1 abgezogen und dann gestoppt, bis die IterateOverEachUser() -Methode von der 5-Sekunden-Schleife erneut aufgerufen wird).
Vielen Dank im Voraus!
I downvoted bekommen, aber ich bekomme keine konstruktive Kritik? Soweit es mich betrifft, sollte mein Code perfekt funktionieren, oder? Ich postete meinen eigenen Code, ich zeigte umfangreiche Recherchen, ich erklärte mein Problem und erkläre, was ich von dem Code erwarte. Dies verdient keinen Downvote .. imo –
seien Sie vorsichtig, Sie ändern ein Wörterbuch während Sie es durchlaufen. In den meisten Sprachen kann dies ein Problem sein –
@ HoàngLong Vielen Dank für Ihr Feedback! Ich habe auch darüber nachgedacht, aber das Hinzufügen von ".ToList()" löst das Problem leider nicht. Würdest du auch einen besseren Weg finden, um das Wörterbuch während des Laufs zu bearbeiten? –