- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
public static void ClearUsers()
{
var toremove = new List<string>();
foreach (var user in SignedUsers.Values)
{
if (!user.IsActive)
toremove.Add(user.UserName);
}
foreach (var usr in toremove)
{
SignedUsers.Remove(usr);
}
}
Есть более красивое решение, но это не делает это гавнокодом.
Просьба автора переписать этот код по его религии, вот мы и посмотрим :)
это было сделать через for с обходом с конца, но и так пойдет
это с какого перепоя? если мне нужно именно один раз пробежать и удалить, то почему бы и нет?
Потому что это неявно основывается на знании внутренней реализации итератора для конкретного коллекшена, что явно противоречит принципу инкапсуляции.
Array.ForEach(SignedUsers.Values.Where(u ser => user.IsActive).ToArray(), user => SignedUsers.Remove(user.UserName));
foreach (var user in SignedUsers.Values.Where(u => !u.IsActive).ToArray())
SignedUsers.Remove(user);
public static void ClearUsers()
{
foreach (var user in SignedUsers.Values)
{
if (!user.IsActive)
SignedUsers.Remove(user.UserName);
}
}
Также он зависит от текущей реализации проперти Values: он возвращает дисконнектед коллекшен - т.е. при изменении дикшенари этот коллекшен не меняется...
Короче говоря, код, вероятно, и работает, но с точки зрения ООП он неправильный.