MinItemsCountAttribute.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Collections;
  2. using System.ComponentModel.DataAnnotations;
  3. namespace Masuit.Tools.Core.Validator;
  4. /// <summary>
  5. /// 元素个数校验
  6. /// </summary>
  7. public class MinItemsCountAttribute : ValidationAttribute
  8. {
  9. private int MinItems { get; }
  10. /// <summary>
  11. /// 最小个数
  12. /// </summary>
  13. /// <param name="value"></param>
  14. public MinItemsCountAttribute(int value)
  15. {
  16. MinItems = value;
  17. }
  18. /// <summary>
  19. /// 校验
  20. /// </summary>
  21. /// <param name="value"></param>
  22. /// <returns></returns>
  23. public override bool IsValid(object value)
  24. {
  25. if (value is null)
  26. {
  27. return false;
  28. }
  29. if (value is ICollection sources)
  30. {
  31. return sources.Count >= MinItems;
  32. }
  33. int num = 0;
  34. if (value is IEnumerable source)
  35. {
  36. var enumerator = source.GetEnumerator();
  37. while (enumerator.MoveNext())
  38. {
  39. checked
  40. {
  41. ++num;
  42. if (num >= MinItems)
  43. {
  44. return true;
  45. }
  46. }
  47. }
  48. }
  49. return false;
  50. }
  51. }