public static ISoldier GetSoldier(string[] args, List <ISoldier> soldiers) { string type = args[0]; int id = int.Parse(args[1]); string firstName = args[2]; string lastName = args[3]; decimal salary = decimal.Parse(args[4]); switch (type) { case "Private": return(new Private(id, firstName, lastName, salary)); case "Spy": int codeNumber = (int)salary; return(new Spy(id, firstName, lastName, codeNumber)); case "LieutenantGeneral": var tempSoldier = new LieutenantGeneral(id, firstName, lastName, salary); tempSoldier.AddPrivates(args, soldiers); return(tempSoldier); case "Engineer": var tempEngineer = new Engineer(id, firstName, lastName, salary, args[5]); tempEngineer.Add(args); return(tempEngineer); case "Commando": var tempCommando = new Commando(id, firstName, lastName, salary, args[5]); tempCommando.Add(args); return(tempCommando); default: throw new ArgumentException("Invalid input"); } }
public void Run() { string command = Console.ReadLine(); while (command != "End") { string[] commandArgs = command .Split(" "); string type = commandArgs[0]; string id = commandArgs[1]; string firstName = commandArgs[2]; string lastName = commandArgs[3]; decimal salary = decimal.Parse(commandArgs[4]); if (type == "Private") { Private soldier = new Private(id, firstName, lastName, salary); this.army.Add(soldier); } else if (type == "LieutenantGeneral") { LieutenantGeneral general = new LieutenantGeneral(id, firstName, lastName, salary); string[] privatesToAddArg = commandArgs .Skip(5) .ToArray(); foreach (var privateId in privatesToAddArg) { ISoldier soldierToAdd = this.army .First(sol => sol.Id == privateId); general.AddPrivate(soldierToAdd); } this.army.Add(general); } else if (type == "Engineer") { try { string corps = commandArgs[5]; IEngineer engineer = new Engineer(id, firstName, lastName, salary, corps); string[] repairArgs = commandArgs .Skip(6) .ToArray(); AddRepairs(engineer, repairArgs); this.army.Add(engineer); } catch (InvalidCorpException ex) { } } else if (type == "Commando") { try { string corps = commandArgs[5]; ICommando commando = new Commando(id, firstName, lastName, salary, corps); string[] missionArgs = commandArgs .Skip(6) .ToArray(); for (int i = 0; i < missionArgs.Length; i += 2) { try { string codeName = missionArgs[i]; string state = missionArgs[i + 1]; IMissions mission = new Mission(codeName, state); commando.Add(mission); } catch (InvalidStateException ex) { continue; } } this.army.Add(commando); } catch (InvalidCorpException ex) { } } else if (type == "Spy") { int codeNumber = (int)salary; ISpy spy = new Spy(id, firstName, lastName, codeNumber); this.army.Add(spy); } command = Console.ReadLine(); } PrintOutput(); }