- 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);
}
}
guest 04.09.2009 11:11 # 0
guest 04.09.2009 11:41 # +1
Есть более красивое решение, но это не делает это гавнокодом.
Просьба автора переписать этот код по его религии, вот мы и посмотрим :)
guest 04.09.2009 11:47 # −1
guest 04.09.2009 11:49 # +1
guest 04.09.2009 11:52 # +2
это было сделать через for с обходом с конца, но и так пойдет
guest 04.09.2009 11:53 # 0
shapigor 04.09.2009 12:06 # 0
asdqwezx 04.09.2009 13:13 # 0
это с какого перепоя? если мне нужно именно один раз пробежать и удалить, то почему бы и нет?
shapigor 04.09.2009 13:42 # 0
Потому что это неявно основывается на знании внутренней реализации итератора для конкретного коллекшена, что явно противоречит принципу инкапсуляции.
guest 04.09.2009 12:13 # −0.2
gecko 04.09.2009 12:30 # −3
Array.ForEach(SignedUsers.Values.Where(u ser => user.IsActive).ToArray(), user => SignedUsers.Remove(user.UserName));
guest 04.09.2009 15:21 # 0
gecko 04.09.2009 15:41 # 0
guest 04.09.2009 16:24 # 0
Dimarius 05.09.2009 18:03 # 0
foreach (var user in SignedUsers.Values.Where(u => !u.IsActive).ToArray())
SignedUsers.Remove(user);
DavidM 08.09.2009 09:57 # −4
public static void ClearUsers()
{
foreach (var user in SignedUsers.Values)
{
if (!user.IsActive)
SignedUsers.Remove(user.UserName);
}
}
guest 08.09.2009 15:02 # 0
shapigor 09.09.2009 00:08 # −1
Также он зависит от текущей реализации проперти Values: он возвращает дисконнектед коллекшен - т.е. при изменении дикшенари этот коллекшен не меняется...
Короче говоря, код, вероятно, и работает, но с точки зрения ООП он неправильный.
guest 09.09.2009 16:28 # 0
guest 02.10.2009 15:48 # 0