Чтобы удалить ChatMember
из группы, вам нужно получить ConcurrentDictionary<>
для этой группы с ...
var groupDictionary = onlineGroupsMembers["groupID"];
... или ...
var groupDictionary = onlineGroupsMembers.TryGetValue("groupID", out ConcurrentDictionary<string, ChatMember> group);
С groupDictionary
затем вы попытаетесь удалить участника ...
var wasMemberRemoved = groupDictionary.TryRemove("memberID", out ChatMember removedMember);
Чтобы полностью удалить группу из onlineGroupsMembers
, вы должны вызвать TryRemove
непосредственно в этом словаре ...
var wasGroupRemoved = onlineGroupsMembers.TryRemove("groupID", out ConcurrentDictionary<string, ChatMember> removedGroup);
Менее громоздкий способ реализовать это может быть с двумя словарями, которые не являются вложенными.Можно сопоставить идентификатор группы с чем-то вроде ConcurrentBag<>
или одновременным HashSet<>
(если он существует) из его ChatMember
s ...
ConcurrentDictionary<string, ConcurrentBag<ChatMember>> groupIdToMembers;
... или от идентификатора группы к идентификатору ее члена ...
ConcurrentDictionary<string, ConcurrentBag<string>> groupIdToMemberIds;
Обратите внимание, что ConcurrentBag<>
допускает дублирование значений.
В последнем случае, еслиВы хотите быстрый способ получить ChatMember
для данного идентификатора участника, вы можете использовать другой словарь для этого ...
ConcurrentDictionary<string, ChatMember> memberIdToMember;