using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace iORM.Common { /// <summary> /// 确保值的准确性工具类 /// </summary> public static class GuardUtility { #region Guard /// <summary> /// 确保值的准确性 /// </summary> /// <param name="dataValue">参数值</param> public static void GuardNotNullOrEmpty(Array dataValue) { GuardNotNullOrEmpty(dataValue, "参数值"); } /// <summary> /// 确保值的准确性 /// </summary> /// <param name="dataValue">参数值</param> /// <param name="name">参数名称</param> public static void GuardNotNullOrEmpty(Array dataValue, string argumentName) { if (dataValue == null || dataValue.Length == 0) ThrowArgumentNullException(argumentName); } /// <summary> /// 确保值的准确性 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="dataValue">参数值</param> public static void GuardNotNullOrEmpty<T>(IList<T> dataValue) { GuardNotNullOrEmpty(dataValue, "参数值"); } /// <summary> /// 确保值的准确性 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="dataValue">参数值</param> /// <param name="argumentName">参数名称</param> public static void GuardNotNullOrEmpty<T>(IList<T> dataValue, string argumentName) { if (dataValue == null || dataValue.Count == 0) ThrowArgumentNullException(argumentName); } /// <summary> /// 确保值的准确性 /// </summary> /// <typeparam name="TKey">键类型</typeparam> /// <typeparam name="TValue">值类型</typeparam> /// <param name="dataValue">参数值</param> public static void GuardNotNullOrEmpty<TKey, TValue>(IDictionary<TKey, TValue> dataValue) { GuardNotNullOrEmpty(dataValue, "参数值"); } /// <summary> /// 确保值的准确性 /// </summary> /// <typeparam name="TKey">键类型</typeparam> /// <typeparam name="TValue">值类型</typeparam> /// <param name="dataValue">参数值</param> /// <param name="argumentName">参数名称</param> public static void GuardNotNullOrEmpty<TKey, TValue>(IDictionary<TKey, TValue> dataValue, string argumentName) { if (dataValue == null || dataValue.Count == 0) ThrowArgumentNullException(argumentName); } /// <summary> /// 确保值的准确性 /// </summary> /// <param name="dataValue">参数值</param> public static void GuardNotNullOrEmpty(string dataValue) { GuardNotNullOrEmpty(dataValue, "参数值"); } /// <summary> /// 确保值的准确性 /// </summary> /// <param name="dataValue">参数值</param> /// <param name="argumentName">参数名称</param> public static void GuardNotNullOrEmpty(string dataValue, string argumentName) { if (string.IsNullOrEmpty(dataValue)) ThrowArgumentNullException(argumentName); } /// <summary> /// 确保值的准确性 /// </summary> /// <param name="dataValue">参数值</param> public static void GuardNotNullOrEmpty(DateTime dataValue) { GuardNotNullOrEmpty(dataValue, "参数值"); } /// <summary> /// 确保值的准确性 /// </summary> /// <param name="dataValue">参数值</param> /// <param name="argumentName">参数名称</param> public static void GuardNotNullOrEmpty(DateTime dataValue, string argumentName) { if (dataValue == DateTime.MinValue) ThrowArgumentNullException(argumentName); } #endregion #region ThrowArgumentNullException /// <summary> /// 抛出参数值为空时的异常 /// </summary> /// <param name="argumentName">参数名称</param> private static void ThrowArgumentNullException(string argumentName) { throw new ArgumentNullException(argumentName +"不可为空"); } #endregion #region GuardIntID /// <summary> /// 确保整数ID值的准确性 /// </summary> /// <param name="dataValue">参数值</param> public static void GuardIntID(int dataValue) { GuardIntID(dataValue, "参数值"); } /// <summary> /// 确保整数ID值的准确性 /// </summary> /// <param name="dataValue">参数值</param> /// <param name="name">参数名称</param> public static void GuardIntID(int dataValue, string argumentName) { if (dataValue <= 0) throw new ArgumentException(argumentName + "必须大于0"); } #endregion #region GuardInRange /// <summary> /// 确保值在指定的范围内 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="dataValue">参数值</param> /// <param name="minimum">最小值</param> /// <param name="maximum">最大值</param> public static void GuardInRange<T>(T dataValue, T minimum, T maximum) where T : IComparable { GuardInRange(dataValue, minimum, maximum, RangeIntervalType.ClosedInterval); } /// <summary> /// 确保值在指定的范围内 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="dataValue">参数值</param> /// <param name="minimum">最小值</param> /// <param name="maximum">最大值</param> /// <param name="argumentName">参数名称</param> public static void GuardInRange<T>(T dataValue, T minimum, T maximum, string argumentName) where T : IComparable { GuardInRange(dataValue, minimum, maximum, argumentName, RangeIntervalType.ClosedInterval); } /// <summary> /// 确保值在指定的范围内 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="dataValue">参数值</param> /// <param name="minimum">最小值</param> /// <param name="maximum">最大值</param> /// <param name="type">范围区间类型</param> public static void GuardInRange<T>(T dataValue, T minimum, T maximum, RangeIntervalType type) where T : IComparable { GuardInRange(dataValue, minimum, maximum, "参数值", type); } /// <summary> /// 确保值在指定的范围内 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="dataValue">参数值</param> /// <param name="minimum">最小值</param> /// <param name="maximum">最大值</param> /// <param name="argumentName">参数名称</param> /// <param name="type">范围区间类型</param> public static void GuardInRange<T>(T dataValue, T minimum, T maximum, string argumentName, RangeIntervalType type) where T : IComparable { Range<T>.GuardInRange(dataValue, minimum, maximum, argumentName, type); } #endregion } }