public static RouteList FilterNoCrossingOccupied(this RouteList baseList, RouteList allRoutes) { if (allRoutes == null) { return(baseList); } if (allRoutes.Count == 0) { return(baseList); } var res = new RouteList(); foreach (var it in baseList) { if (string.IsNullOrEmpty(it?.Name)) { continue; } var crossingRoutes = allRoutes.GetCrossingRoutesOf(it); if (crossingRoutes.Count == 0) { if (!res.Contains(it)) { res.Add(it); } } else { var isOccupied = false; foreach (var itt in crossingRoutes) { if (itt == null) { continue; } isOccupied = itt.Occupied; if (isOccupied) { break; } } if (isOccupied) { continue; } if (!res.Contains(it)) { res.Add(it); } } } return(res); }