2015-01-25 4 views
0

Помогите мне, пожалуйста, как работает ConcurrentDictionary? у меня есть это:Как работать с OUT-значением в ConcurrentDictionary.TryGetValue?

UsersOnlineClass client; 
if (UsersOnlineDictionary.TryGetValue(comClientID, out client)) { } 

я должен изменить некоторые значения в клиента и сохранить изменения в ConcurrentDictionary. Как будет правильно?

UsersOnlineClass updatedClient = new UsersOnlineClass(); 
updatedClient = client; //make copy 
updatedClient.someInt = -1; 
if (UsersOnlineDictionary.TryUpdate(client.Client_id, updatedClient, client)) { } 

или я могу просто сделать это, и этого будет достаточно?

client.someInt = -1; 
+0

Просто проверьте, и вы увидите. Поскольку 'UsersOnlineClass' представляется ссылочным типом, вы можете использовать оба способа, хотя один лайнер легче понять. – dotnetom

+1

Является ли' UsersOnlineClass' 'классом' или' struct'? Если класс, 'updatedClient = client; // make copy' фактически не будет копировать класс. Если структура, вам не нужно ее копировать локально, потому что она уже будет скопирована из словаря. ([См. Здесь в разделе 'struct assign'] (https://msdn.microsoft.com/en-us/library/saxz13w4.aspx)). – dbc

ответ

1

Если UsersOnlineClass является класс, код прекрасно (до тех пор, как «someInt» потокобезопасно), так как клиента то есть ссылка на объект в словаре. Если UsersOnlineClass является struct, однако вы должны сделать так, как в своем примере кода, так как клиент будет тогда копией того, что находится в словаре.

 Смежные вопросы

  • Нет связанных вопросов^_^