2016-10-27 10 views
0

Wie kann ich einen Wert von Dictionary setzen?KeyPairValue Linq Wie setze ich den Wert

public class Holding 
{ 
    public Dictionary<int, double> QuantityPricePair { get; set; } 

    public Holding() 
    { 
     QuantityPricePair = new Dictionary<int, double>(); 
    } 
} 

Linq Abfrage ein Objekt

KeyValuePair<int, double> query = holding.QuantityPricePair.Where(h => h.Value == 7).SingleOrDefault(); 
if (query.Key != 0) 
{ 
    query.Value = 3; 
} 

ich den Code kompilieren kann nicht zu finden, die behaupten, dass KeyValuePair keine Setter hat

+0

Sie können nur ein neues Wörterbuch zurückgeben. – selami

+0

'KeyValuePair' ist unveränderlich - Sie können es nicht ändern. Alles, was Sie tun können, ist ein _new_ one zu erstellen oder den Indexer des Wörterbuchs zu verwenden, um den Wert für einen bestimmten Schlüssel zu aktualisieren. –

Antwort

1

KeyValuePair<K,V> ein unveränderliches Objekt ist, das in einem Schlüssel/Wert-Paar bezieht sich das Wörterbuch. Sie können keinen Teil des Objekts KeyvaluePair ändern. Aber wenn Sie den Wert im Wörterbuch für diesen Schlüssel ändern möchten, ist das einfach zu tun - das Wörterbuch haben genau dort:

if (query != null && query.Key != 0) 
{ 
    holding.QuantityPricePair[query.Value] = 3; 
} 

SingleOrDefault() kann null zurückkehren, also nicht vernachlässigen zu tragen, dass berücksichtigen.

Wenn das Ziel darin besteht, den eigenen Wert des Wörterbuchs nicht zu ändern, wenn Sie stattdessen nur die KeyValuePair ändern möchten, können Sie ganz einfach eine neue KeyValuePair erstellen, und niemand wird jemals den Unterschied erkennen :

if (query != null && query.Key != 0) 
{ 
    query = new KeyValuePair<int, double>(query.Key, 3); 
} 

Beachten Sie wieder, dass die zweite Version den im Wörterbuch gespeicherten Wert möglicherweise nicht ändern kann.

+1

Ich denke, du meinst 'halten.QuantityPricePair [query.Key] = 3' –

+0

@DStanley Ich denke, du hast Recht! –

Verwandte Themen