public MarkingStore Filter(Func <IMarker, bool> predicate = null) => new MarkingStore { KingLocations = KingLocations.ToArray().ToDictionary(pair => pair.Key, pair => pair.Value), m_markers = m_markers.ToDictionary(pair => pair.Key, pair => pair.Value.Where(predicate ?? (_ => true)).Select(marker => marker.Clone()).ToList()), AvailableColors = AvailableColors.ToList() };
public IEnumerable <T> GetKingMarkers <T>(Color color, params MarkerType[] types) where T : IMarker => KingLocations.ContainsKey(color) ? GetMarkers <T>(KingLocations[color], types) : Enumerable.Empty <T>();