ArgumentValidation.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ProjectBase.Util
  7. {
  8. /// <summary>
  9. /// 参数验证的通用校验辅助类
  10. /// </summary>
  11. public sealed class ArgumentValidation
  12. {
  13. #region 提示信息常量
  14. private const string ExceptionEmptyString = "参数 '{0}'的值不能为空字符串。";
  15. private const string ExceptionInvalidNullNameArgument = "参数'{0}'的名称不能为空引用或空字符串。";
  16. private const string ExceptionByteArrayValueMustBeGreaterThanZeroBytes = "数值必须大于0字节.";
  17. private const string ExceptionExpectedType = "无效的类型,期待的类型必须为'{0}'。";
  18. private const string ExceptionEnumerationNotDefined = "{0}不是{1}的一个有效值";
  19. #endregion
  20. private ArgumentValidation()
  21. {
  22. }
  23. /// <summary>
  24. /// <para>检查参数<paramref name="variable"/>是否为空字符串。</para>
  25. /// </summary>
  26. /// <param name="variable">待检查的值</param>
  27. /// <param name="variableName">参数的名称</param>
  28. public static void CheckForEmptyString(string variable, string variableName)
  29. {
  30. CheckForNullReference(variable, variableName);
  31. CheckForNullReference(variableName, "variableName");
  32. if (variable.Length == 0)
  33. {
  34. string message = string.Format(ExceptionEmptyString, variableName);
  35. throw new ArgumentException(message);
  36. }
  37. }
  38. /// <summary>
  39. /// <para>检查参数<paramref name="variable"/>是否为空引用(Null)。</para>
  40. /// </summary>
  41. /// <param name="variable">待检查的值</param>
  42. /// <param name="variableName">待检查变量的名称</param>
  43. public static void CheckForNullReference(object variable, string variableName)
  44. {
  45. if (variableName == null)
  46. {
  47. throw new ArgumentNullException("variableName");
  48. }
  49. if (null == variable)
  50. {
  51. throw new ArgumentNullException(variableName);
  52. }
  53. }
  54. /// <summary>
  55. /// 验证输入的参数messageName非空字符串,也非空引用
  56. /// </summary>
  57. /// <param name="name">参数名称</param>
  58. /// <param name="messageName">参数的值</param>
  59. public static void CheckForInvalidNullNameReference(string name, string messageName)
  60. {
  61. if ((null == name) || (name.Length == 0))
  62. {
  63. string message = string.Format(ExceptionInvalidNullNameArgument, messageName);
  64. throw new InvalidOperationException(message);
  65. }
  66. }
  67. /// <summary>
  68. /// <para>验证参数<paramref name="bytes"/>非零长度,如果为零长度,则抛出异常<see cref="ArgumentException"/>。</para>
  69. /// </summary>
  70. /// <param name="bytes">待检查的字节数组</param>
  71. /// <param name="variableName">待检查参数的名称</param>
  72. public static void CheckForZeroBytes(byte[] bytes, string variableName)
  73. {
  74. CheckForNullReference(bytes, "bytes");
  75. CheckForNullReference(variableName, "variableName");
  76. if (bytes.Length == 0)
  77. {
  78. string message = string.Format(ExceptionByteArrayValueMustBeGreaterThanZeroBytes, variableName);
  79. throw new ArgumentException(message);
  80. }
  81. }
  82. /// <summary>
  83. /// <para>检查参数<paramref name="variable"/>是否符合指定的类型。</para>
  84. /// </summary>
  85. /// <param name="variable">待检查的值</param>
  86. /// <param name="type">参数variable的类型</param>
  87. public static void CheckExpectedType(object variable, Type type)
  88. {
  89. CheckForNullReference(variable, "variable");
  90. CheckForNullReference(type, "type");
  91. if (!type.IsAssignableFrom(variable.GetType()))
  92. {
  93. string message = string.Format(ExceptionExpectedType, type.FullName);
  94. throw new ArgumentException(message);
  95. }
  96. }
  97. /// <summary>
  98. /// 检查variable是否一个有效的<paramref name="enumType"/>枚举类型
  99. /// </summary>
  100. /// <param name="variable">待检查的值</param>
  101. /// <param name="enumType">参数variable的枚举类型</param>
  102. /// <param name="variableName">变量variable的名称</param>
  103. public static void CheckEnumeration(Type enumType, object variable, string variableName)
  104. {
  105. CheckForNullReference(variable, "variable");
  106. CheckForNullReference(enumType, "enumType");
  107. CheckForNullReference(variableName, "variableName");
  108. if (!Enum.IsDefined(enumType, variable))
  109. {
  110. string message = string.Format(ExceptionEnumerationNotDefined,
  111. variable.ToString(), enumType.FullName, variableName);
  112. throw new ArgumentException(message);
  113. }
  114. }
  115. }
  116. }