private void selectNext(int direction) { var visibleRooms = Rooms.AsEnumerable().Where(r => r.IsPresent); Room room; if (selectedRoom.Value == null) { room = visibleRooms.FirstOrDefault()?.Room; } else { if (direction < 0) { visibleRooms = visibleRooms.Reverse(); } room = visibleRooms.SkipWhile(r => r.Room != selectedRoom.Value).Skip(1).FirstOrDefault()?.Room; } // we already have a valid selection only change selection if we still have a room to switch to. if (room != null) { selectRoom(room); } }