private Transaction ParseLine(string line) { var wordReader = WordReader.FromLine(line); if (!wordReader.HasNext()) { throw new InvalidOperationException(string.Format("Invalid line: {0}", line)); } switch (wordReader.Next()) { case "AddEmp": return(AddEmp(line, wordReader)); case "DelEmp": return(DelEmp(line, wordReader)); case "TimeCard": return(TimeCard(line, wordReader)); case "SalesReceipt": return(SalesReceipt(line, wordReader)); case "ServiceCharge": return(ServiceCharge(line, wordReader)); case "ChgEmp": return(ChangeEmployee(line, wordReader)); case "PayDate": return(PayDate(line, wordReader)); } throw new InvalidOperationException(string.Format("Cannot parse {0}", line)); }