2012-07-27 65 views
0

我使用Visual Studio 2010的C++ Express和我MANT將項目添加到我的ConcurrentDictionary:ConcurrentDictionary-> AddOrUpdate在VS C++

我有這樣的代碼:

String^ key = gcnew String("key"); 
int value = 123; 
myDictionary->AddOrUpdate(key,value,/*WHAT TO ADD HERE?*/); 

AddOrUpdate方法需要3個參數,而不是像正常的字典2.

微軟的網站說,它需要這樣的論點:

public: 
TValue AddOrUpdate(
TKey key, 
TValue addValue, 
Func<TKey, TValue, TValue>^ updateValueFactory 
) 

上微軟的網站我也發現代碼在C#:

cd.AddOrUpdate(1, 1, (key, oldValue) => oldValue + 1); 

但它不是在C++工作。我必須提出第三個論據?

回答

0

第三個參數是一個委託,它在您找到的C#示例代碼中是一個lambda。然而,C++/CLI不支持lambdas,所以你必須用獨立的方法來完成。

static int UpdateFunc(String^ key, int value) 
{ 
    return value + 1; 
} 

cd->AddOrUpdate("foo", 1, gcnew Func<String^, int, int>(MyClass::UpdateFunc)); 

但是,你說「我想添加一個項目到我的ConcurrentDictionary」。沒有簡單的「添加」方法,因爲其他線程可能修改了ConcurrentDictionary。因此,如何在字典中添加內容有幾個選擇。

  • AddOrUpdate:如果該鍵已經存在,則添加一個值或修改現有值。 (將當前值傳遞給代理,該代理返回修改。)
  • GetOrAdd:添加一個值,或者如果該鍵已經存在,則檢索現有值。 (如果密鑰已存在,則不修改字典。)
  • this [](索引器,使用方括號):添加一個值,或用常量值替換現有值。

如果你想要的是一個簡單的「添加」,它可能是方括號你感興趣的內容。

cd["foo"] = 1;