// Создать изменение состояния для заданного сообщения private StateChange CreateChange(OutgoingMessage message, ChangeData data) { object receivers = data["to"]; if (receivers == null || (receivers as string) == "*") { return(StateChange.CreateBroadcast(message)); } else if (receivers is double[] seatIdxs) { var targetPlayers = seatIdxs.Cast <int>().Select(idx => { return(session.Room.PlayerSeats[idx]); }).ToArray(); return(StateChange.CreateFor(message, targetPlayers)); } else { int targetSeatIdx = (int)(double)receivers; // Unboxing var targetPlayer = session.Room.PlayerSeats[targetSeatIdx]; return(StateChange.CreateFor(message, new[] { targetPlayer })); } }