public Action DoAction(Action action) { switch (action.Name) { case ("CheckView"): Set <string> modelView = (Set <string>)action[0]; Set <string> implView = new Set <string>(bag.table.Keys); if (!modelView.Equals(implView)) { throw new Exception("Inconsistent views of state: model:" + modelView + " iut:" + implView); } return(null); case ("Add"): bag.Add((string)action[0]); return(null); case ("Delete"): bag.Delete((string)action[0]); return(null); case ("Lookup_Start"): return(Action.Create("Lookup_Finish", bag.Lookup((string)action[0]))); case ("Count_Start"): return(Action.Create("Count_Finish", bag.Count)); default: throw new Exception("Unexpected action " + action); } }