public static Soldier ProduceSoldier(string[] input) { switch (input[0]) { case "Private": Private priv = new Private(input[1], input[2], input[3], double.Parse(input[4])); soldiers.Add(priv); return(priv); case "LeutenantGeneral": var currPrivates = ExtractPrivates(soldiers, input.Skip(5).ToList()); LeutenantGeneral general = new LeutenantGeneral(input[1], input[2], input[3], double.Parse(input[4]), currPrivates); soldiers.Add(general); return(general); case "Engineer": Engineer eng = new Engineer(input[1], input[2], input[3], double.Parse(input[4]), input[5], Repairs(input)); soldiers.Add(eng); return(eng); case "Commando": Commando comm = new Commando(input[1], input[2], input[3], double.Parse(input[4]), input[5], Missions(input)); soldiers.Add(comm); return(comm); case "Spy": Spy spy = new Spy(input[1], input[2], input[3], int.Parse(input[4])); soldiers.Add(spy); return(spy); default: return(null); } }
private void DistributeCommands() { string input; while ((input = Console.ReadLine()) != "End") { var tokens = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList(); var type = tokens[0]; tokens.RemoveAt(0); string id = tokens[0]; string firstName = tokens[1]; string lastName = tokens[2]; switch (type) { case "Spy": soldiers.Add(new Spy(id, firstName, lastName, int.Parse(tokens[3]))); break; case "Private": soldiers.Add(new Private(id, firstName, lastName, double.Parse(tokens[3]))); break; case "LeutenantGeneral": LeutenantGeneral general = new LeutenantGeneral(id, firstName, lastName, double.Parse(tokens[3])); tokens.Skip(4).ToList().ForEach(p => general.Privates.Add(soldiers.First(priv => priv.Id == p) as IPrivate)); soldiers.Add(general); break; case "Engineer": Corps corps = tokens[4] == "Airforces" ? Corps.Airforces : Corps.Marines; Engineer engineer = new Engineer(id, firstName, lastName, double.Parse(tokens[3]), corps); tokens = tokens.Skip(5).ToList(); for (int i = 0; i < tokens.Count; i += 2) { string part = tokens[i]; int workedHours = int.Parse(tokens[i + 1]); IRepair repair = new Repair(part, workedHours); engineer.Repairs.Add(repair); } soldiers.Add(engineer); break; case "Commando": corps = tokens[4] == "Airforces" ? Corps.Airforces : Corps.Marines; Commando commando = new Commando(id, firstName, lastName, double.Parse(tokens[3]), corps); tokens = tokens.Skip(5).ToList(); for (int i = 0; i < tokens.Count; i += 2) { string missionCodeName = tokens[i]; State missionState = State.inProgress; if (Enum.TryParse(tokens[i + 1], out missionState)) { IMission mission = new Mission(missionCodeName, missionState); commando.Missions.Add(mission); } } soldiers.Add(commando); break; default: break; } } }