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);
}
}