public override bool Handle(object input, Queue<string> tokens) { var elementType = _property.PropertyType.GetGenericArguments().First(); var list = typeof(List<>).CloseAndBuildAs<IList>(elementType); var wasHandled = false; var flag = ""; if (tokens.NextIsFlagFor(_property)) { flag = tokens.Dequeue(); while (tokens.Count > 0 && !tokens.NextIsFlag()) { var value = _converter.FromString(tokens.Dequeue(), elementType); list.Add(value); wasHandled = true; } if(!wasHandled) { throw new InvalidUsageException("No values specified for flag {0}.".ToFormat(flag)); } _property.SetValue(input, list, null); } return wasHandled; }