Работает ли аннотация данных максимальной длины со списком?

#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 аннотации данных.