namespace ArgumentsToolkit; /// /// Атрибут для проверки строкового значения на соответствие списку допустимых значений. /// [AttributeUsage(AttributeTargets.Property)] public class AllowedValuesAttribute : ValidationAttribute { /// /// Список допустимых значений. /// public string[] Values { get; } /// /// Создаёт новый атрибут допустимых значений. /// /// Массив допустимых строковых значений. public AllowedValuesAttribute(params string[] values) { Values = values; } /// /// Создаёт новый атрибут допустимых значений. /// /// Enum допустимых значений. public AllowedValuesAttribute(Enum en) { var enums = Enum.GetValues(en.GetType()); List values = new(); foreach (var e in enums) { values.Add(e.ToString()); } Values = values.ToArray(); } public override string ErrorTemplate { get; set; } = "--{0}: значение {1} не входит в диапазон [{2}]"; public override bool Validate(object? value) { if (value is string s) return Values.Contains(s); return true; } public override string GetErrorMessage(string optionName, object? value) { return string.Format(ErrorTemplate, optionName, value, string.Join(", ", Values)); } }