2016-10-27 65 views
0

如何設置Dictionary的值?KeyPairValue Linq如何設置值

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

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

的LINQ查詢查找一個對象

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

我不能編譯代碼,聲稱KeyValuePair沒有設定器

+0

你只能返回一個新的字典。 – selami

+0

'KeyValuePair'是不可變的 - 你不能改變它。你所能做的只是創建一個_new_,或者使用字典的索引器來更新給定鍵的值。 –

回答

1

KeyValuePair<K,V>是不可變的對象指的是一個鍵/值對在詞典。您不能更改KeyvaluePair對象的任何部分。但是如果你想在字典中該鍵改變數值,這很容易做到 - 你有字典就在那裏:

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

SingleOrDefault()可以返回null,所以不要忽視採取考慮到。

如果目標是不會改變的字典本身的價值存在,相反,如果你只是想在做別的事情與它之前改變KeyValuePair,您可以輕鬆地創建一個新的KeyValuePair代替,沒有人會知道其中的差別:

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

再說一次,請注意第二個版本不能更改存儲在字典中的值。

+1

我想你的意思是'hold.QuantityPricePair [query.Key] = 3' –

+0

@DStanley我認爲你是對的! –