using System.Reflection; namespace DS.Module.Core.Extensions; /// /// 对象拓展方法 /// public static class ObjectExtensions { /// /// 验证指定值的断言是否为真,如果不为真,抛出指定消息的指定类型异常 /// /// 异常类型 /// 要验证的断言。 /// 异常消息。 private static void Require(bool assertion, string message) where TException : Exception { if (assertion) { return; } if (string.IsNullOrEmpty(message)) { throw new ArgumentNullException(nameof(message)); } TException exception = (TException)Activator.CreateInstance(typeof(TException), message); throw exception; } /// /// 验证指定值的断言表达式是否为真,不为值抛出异常 /// /// /// 要验证的断言表达式 /// 异常消息 public static void Required(this T value, Func assertionFunc, string message) { if (assertionFunc == null) { throw new ArgumentNullException(nameof(assertionFunc)); } Require(assertionFunc(value), message); } /// /// 验证指定值的断言表达式是否为真,不为真抛出异常 /// /// 要判断的值的类型 /// 抛出的异常类型 /// 要判断的值 /// 要验证的断言表达式 /// 异常消息 public static void Required(this T value, Func assertionFunc, string message) where TException : Exception { if (assertionFunc == null) { throw new ArgumentNullException(nameof(assertionFunc)); } Require(assertionFunc(value), message); } /// /// 检查参数不能为空引用,否则抛出异常。 /// /// /// 参数名称 /// public static void NotNull(this T value, string paramName) { Require(value != null, $"参数“{paramName}”不能为空引用。"); } /// /// 检查字符串不能为空引用或空字符串,否则抛出异常或异常。 /// /// /// 参数名称。 /// /// public static void NotNullOrEmpty(this string value, string paramName) { Require(!string.IsNullOrEmpty(value), $"参数“{paramName}”不能为空引用或空字符串。"); } /// /// 检查Guid值不能为Guid.Empty,否则抛出异常。 /// /// /// 参数名称。 /// public static void NotEmpty(this Guid value, string paramName) { Require(value != Guid.Empty, $"参数“{paramName}”的值不能为Guid.Empty"); } /// /// 检查集合不能为空引用或空集合,否则抛出异常或异常。 /// /// 集合项的类型。 /// /// 参数名称。 /// /// public static void NotNullOrEmpty(this IEnumerable collection, string paramName) { NotNull(collection, paramName); Require(collection.Any(), $"参数“{paramName}”不能为空引用或空集合。"); } /// /// 检查集合不能为空委托,否则抛出异常或异常。 /// /// 委托类型 /// 委托类型 /// 委托 /// 参数名称。 public static void NotNull(this Func func, string paramName) { NotNull(func, paramName); Require(func.IsNotNull(), $"参数“{paramName}”不能为空委托。"); } /// /// 把对象类型转换为指定类型 /// /// 要转换的值 /// 要转换的类型 /// public static object AsTo(this object value, Type type) { if (value == null || value is DBNull) { return null; } //如果是Nullable类型 if (type.IsNullableType()) { type = type.GetUnNullableType(); } //枚举类型 if (type.IsEnum) { return Enum.Parse(type, value.ToString()); } //if (type == typeof(Enum)) //{ // return Enum.Parse(type, value.ToString()); //} if (type == typeof(Guid)) { Guid.TryParse(value.ToString(), out var newGuid); return newGuid; } if (value?.GetType() == typeof(Guid)) { return value.ToString(); } return Convert.ChangeType(value, type); } /// /// 把对象类型转换为指定类型 /// /// 动态类型 /// 要转换对象 /// 转化后的指定类型的对象 public static T AsTo(this object value) { return (T)AsTo(value, typeof(T)); } /// /// 类型转换 /// /// /// /// public static T As(this object obj) where T : class { return (T)obj; } /// /// 是否为Null /// /// 判断的值 /// true为null,false不为null public static bool IsNull(this object value) { return value == null ? true : false; } public static bool IsNotNull(this object value) { return !value.IsNull(); } /// /// 判断特性相应是否存在 /// /// 动态类型要判断的特性 /// /// /// 如果存在还在返回true,否则返回false public static bool HasAttribute(this MemberInfo memberInfo, bool inherit = true) where T : Attribute { return memberInfo.IsDefined(typeof(T), inherit); } }