Позиционные и именованные аргументы атрибута в C#
Синтаксис похож на вызов метода: сначала обязательные значения, затем Name = value для свойств.
Так в одной пометке задают и диапазон, и текст ошибки.
Опишем атрибут диапазона и повесим его на класс оценки. Числа 1 и 10 попадут в конструктор, а ErrorMessage задаётся по имени. Затем программа берёт эту пометку у типа и печатает нижнюю границу и текст ошибки:
using System.Linq;
using System.Reflection;
RangeAttribute meta = typeof(Score)
.GetCustomAttributes(typeof(RangeAttribute), inherit: false)
.Cast<RangeAttribute>()
.Single();
Console.WriteLine(meta.Min); // выведет 1
Console.WriteLine(meta.ErrorMessage); // выведет "out"
[Range(1, 10, ErrorMessage = "out")]
class Score { }
class RangeAttribute : Attribute
{
public RangeAttribute(int min, int max)
{
Min = min;
Max = max;
}
public int Min { get; }
public int Max { get; }
public string? ErrorMessage { get; set; }
}
Повесьте на класс Page пометку с границами 3 и 40 и текстом "full". Выведите нижнюю границу и этот текст.