#c# #list #data-annotations #maxlength
Вопрос:
Можно использовать [MaxLength()]
атрибут со строками и простыми массивами:
т.е.:
[MaxLength(500)]
public string ProductName { get; set; }
Или
[MaxLength(50)]
public string [] Products { get; set; }
Но можно ли его использовать со списком?
т.е.:
[MaxLength(50)]
public List<string> Types { get; set; }
Ответ №1:
Глядя на исходный код, это зависит от того, какой .Используется сетевая версия.
- В .NET framework он пытается привести объект как
Array
. Поэтому, если это не так (например,List<T>
), будет вызвано исключение InvalidCastException. (источник) - В .NET Core он вызывает метод с именем
TryGetCount()
, который пытается привести какICollection
, и если это не удается, он использует отражение для полученияCount
свойства. Поэтому он должен работать с любым объектом, который реализуетICollection
(которыйList<T>
реализует), или любым объектом соint Count
свойством. (источник)
Очевидно, что в обоих случаях он сначала проверяет, является ли объект строкой, прежде чем перейти к коллекции.
Примечание: То же самое относится и к MinLength
аннотации данных.