private static void EnlistSoldier(List <Soldier> soldiers, string[] soldierInfo) { string rank = soldierInfo[0]; int id = int.Parse(soldierInfo[1]); string firstName = soldierInfo[2]; string lastName = soldierInfo[3]; double salary = double.Parse(soldierInfo[4]); Soldier soldier = null; try { switch (rank.ToUpper()) { case "PRIVATE": Private privateSoldier = new Private(id, firstName, lastName, salary); soldier = privateSoldier; break; case "LEUTENANTGENERAL": LieutenantGeneral leutenantGeneral = new LieutenantGeneral(id, firstName, lastName, salary); if (soldierInfo.Length > 5) { for (int i = 5; i < soldierInfo.Length; i++) { int soldierId = int.Parse(soldierInfo[i]); Private recruit = (Private)soldiers.First(s => s.Id == soldierId); leutenantGeneral.EnlistPrivate(recruit); } } soldier = leutenantGeneral; break; case "ENGINEER": string corps = soldierInfo[5]; Engineer engineer = new Engineer(id, firstName, lastName, salary, corps); if (soldierInfo.Length > 6) { for (int i = 6; i < soldierInfo.Length; i++) { string partName = soldierInfo[i]; int hoursWorked = int.Parse(soldierInfo[++i]); Repair repair = new Repair(partName, hoursWorked); engineer.ScheduleRepair(repair); } } soldier = engineer; break; case "COMMANDO": corps = soldierInfo[5]; Commando commando = new Commando(id, firstName, lastName, salary, corps); if (soldierInfo.Length > 6) { for (int i = 6; i < soldierInfo.Length; i++) { string codeName = soldierInfo[i]; string missionState = soldierInfo[++i]; try { Mission mission = new Mission(codeName, missionState); commando.AcceptMission(mission); } catch { } } } soldier = commando; break; case "SPY": int codeNumber = int.Parse(soldierInfo[4]); Spy spy = new Spy(id, firstName, lastName, codeNumber); soldier = spy; break; default: throw new ArgumentException("Invalid rank!"); } soldiers.Add(soldier); } catch { } }