我使用的是Visual Studio 2010 C ++ Express,我想在ConcurrentDictionary中添加一个项目:
我有这样的代码:
String^ key = gcnew String("key");
int value = 123;
myDictionary->AddOrUpdate(key,value,/*WHAT TO ADD HERE?*/);
AddOrUpdate Method需要3个参数,而不是普通的Dictionary 2。
微软网站表示需要这样的论据:
public:
TValue AddOrUpdate(
TKey key,
TValue addValue,
Func<TKey, TValue, TValue>^ updateValueFactory
)
在微软网站上我也找到了C#中的代码:
cd.AddOrUpdate(1, 1, (key, oldValue) => oldValue + 1);
但它在C ++中不起作用。我必须把它作为第三个论点?
答案 0 :(得分: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。因此,如何将内容放入字典中有几种选择。
如果你想要的只是一个简单的'添加',它可能是你感兴趣的方括号。
cd["foo"] = 1;