MaxLength 数据注释是否适用于 List<T>?

问题描述

可以将 [MaxLength()] 属性与字符串和简单数组一起使用:

[MaxLength(500)]
public string ProductName { get; set; }

[MaxLength(50)]
public string [] Products { get; set; }

但它可以与列表一起使用吗?

[MaxLength(50)]
public List<string> Types { get; set; }

解决方法

查看源代码,这取决于所使用的 .NET 版本。

  • 在 .NET 框架中,它尝试将对象转换为 Array。因此,如果不是(例如,List<T>),将引发 InvalidCastException。 (source)

  • 在 .NET Core 中,名为 TryGetCount()it calls a method 尝试强制转换为 ICollection,如果失败,则使用反射来获取 Count 属性。因此,它应该适用于任何实现 ICollectionList<T> 这样做)的对象或任何具有 int Count 属性的对象。 (source)

显然,在这两种情况下,它首先检查对象是否为字符串,然后再进行集合。

注意:MinLength data annotation 也是如此。