Ok, in Ihrem Beispiel sind Sie effektiv nur den Eintrag für das Customer
Objekt zu finden, mit Id
= 1 und dem zugehörigen Wert zu aktualisieren. In der Praxis glaube ich, dass Ihr Code wahrscheinlich einen Verweis auf Ihr beabsichtigtes Objekt erhalten wird, bevor der zugehörige Wert im Wörterbuch aktualisiert wird. Wenn dies der Fall ist, ist keine Schleife erforderlich.
Unten ist ein sehr einfaches Beispiel, in dem eine Schleife nicht benötigt wird, da Ihr Code bereits eine Referenz auf die customer1
Variable hat. Während mein Beispiel übermäßig vereinfacht ist, ist das Konzept, dass Sie möglicherweise eine Referenz auf Ihr gewünschtes Customer
Objekt auf andere Weise als über das Wörterbuch iterieren können.
static void Main(string[] args)
{
Dictionary<Customer, int> CustomerOrderDictionary = new Dictionary<Customer, int>();
Customer customer1 = new Customer { Id = 1, FullName = "Jo Bloogs" };
Customer customer2 = new Customer { Id = 2, FullName = "Rob Smith" };
CustomerOrderDictionary.Add(customer1, 3);
CustomerOrderDictionary.Add(customer2, 5);
// you already have a reference to customer1, so just use the accessor on the dictionary to update the value
CustomerOrderDictionary[customer1]++;
}
Wenn Sie eine Art von Update auf mehrere Customer
Objekte basierend auf einigen anderen Kriterien erfüllen, dann könnten Sie eine Schleife benötigen. Im folgenden Beispiel wird davon ausgegangen, dass Sie eine andere Sammlung als das Wörterbuch haben, das Ihre Customer
Objekte speichert, und dass Sie diese Sammlung von Customer
Objekten verwenden können, um diejenigen zu identifizieren, deren zugehöriger Wert im Wörterbuch aktualisiert werden muss.
static void Main(string[] args)
{
// presumably you will have a separate collection of all your Customer objects somewhere
List<Customer> customers = new List<Customer>();
Customer customer1 = new Customer { Id = 1, FullName = "Jo Bloogs" };
Customer customer2 = new Customer { Id = 2, FullName = "Rob Smith" };
Customer customer3 = new Customer { Id = 3, FullName = "Rob Zombie" };
customers.Add(customer1);
customers.Add(customer2);
customers.Add(customer3);
Dictionary<Customer, int> CustomerOrderDictionary = new Dictionary<Customer, int>();
CustomerOrderDictionary.Add(customer1, 3);
CustomerOrderDictionary.Add(customer2, 5);
// let's just say that we're going to update the value for any customers whose name starts with "Rob"
// use the separate list of Customer objects for the iteration,
// because you would not be allowed to modify the dictionary if you iterate over the dictionary directly
foreach (var customer in customers.Where(c => c.FullName.StartsWith("Rob")))
{
// the dictionary may or may not contain an entry for every Customer in the list, so use TryGetValue
int value;
if (CustomerOrderDictionary.TryGetValue(customer, out value))
// if an entry is found for this customer, then increment the value of that entry by 1
CustomerOrderDictionary[customer] = value + 1;
else
// if there is no entry in the dictionary for this Customer, let's add one just for the heck of it
CustomerOrderDictionary.Add(customer, 1);
}
}
Ist dies nicht der Fall ist, und die einzige Quelle für Customer
Objekte, die Sie zur Verfügung haben, ist das Wörterbuch selbst, dann müssen Sie eine Art von Klonen/Kopieren dieser Objekte, um eine separate Liste auszuführen/Array vor dem Iterieren über das Wörterbuch für die Änderung. Siehe Jon Skeets Antwort für diesen Fall; Er schlägt vor, einen Where
Filter für die Eigenschaft Keys
des Wörterbuchs zu verwenden und verwendet die ToList
Methode, um eine separate List<Customer>
Instanz für den Zweck der Iteration zu erstellen. Erstellen Sie hier
Hallo, Vielen Dank, dass funktioniert hat.Ich werde versuchen, um zu sehen, ob das mit dem echten Code funktioniert.Dank – user9969