public string Shake(IColored a, IColored b, Processor intel) { var typeOfFirstColor = a.GetType(); var typeOfSecondColor = b.GetType(); var names = typeOfFirstColor.Name.ToLower() + typeOfSecondColor.Name.ToLower(); switch (names) { case "redred": return intel.Mix(new Red(a), new Red(b)); case "greengreen": return intel.Mix(new Green(a), new Green(b)); case "redgreen": return intel.Mix(new Red(a), new Green(b)); case "greenred": return intel.Mix(new Green(a), new Red(b)); default: return default(string); } }