Files
ArgumentsToolkit/ArgumentsToolkit.Validation/Validations/AllowedValuesAttribute.cs

54 lines
1.7 KiB
C#

namespace ArgumentsToolkit;
/// <summary>
/// Атрибут для проверки строкового значения на соответствие списку допустимых значений.
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class AllowedValuesAttribute : ValidationAttribute
{
/// <summary>
/// Список допустимых значений.
/// </summary>
public string[] Values { get; }
/// <summary>
/// Создаёт новый атрибут допустимых значений.
/// </summary>
/// <param name="values">Массив допустимых строковых значений.</param>
public AllowedValuesAttribute(params string[] values)
{
Values = values;
}
/// <summary>
/// Создаёт новый атрибут допустимых значений.
/// </summary>
/// <param name="en">Enum допустимых значений.</param>
public AllowedValuesAttribute(Enum en)
{
var enums = Enum.GetValues(en.GetType());
List<string> 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));
}
}