public int Count(Func<Item, bool> predicate) { lock (_pockets) return _pockets.Values.Where(a => !InvisiblePockets.Contains(a.Pocket)) .Sum(pocket => pocket.CountItem(predicate)); }