250 lines
8.1 KiB
C#
Raw Permalink Normal View History

2025-04-21 14:10:27 +08:00
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MyCode.Project.Infrastructure.Common;
using MyCode.Project.Infrastructure.Enumeration;
namespace MyCode.Project.Infrastructure.Extensions
{
/// <summary>
/// 公共扩展
/// </summary>
public static partial class Extensions
{
#region IsEmpty(Guid是否为空)
/// <summary>
/// Guid 是否为空
/// </summary>
/// <param name="value">值</param>
/// <returns></returns>
public static bool IsEmpty(this Guid value)
{
if (value == Guid.Empty)
{
return true;
}
return false;
}
#endregion
#region IsEmpty(Guid? )
/// <summary>
/// Guid? 是否为空
/// </summary>
/// <param name="value">值</param>
/// <returns></returns>
public static bool IsEmpty(this Guid? value)
{
if (value == null)
{
return true;
}
return IsEmpty(value.Value);
}
#endregion
#region IsEmpty( )
/// <summary>
/// 判断 数组 是否为空
/// </summary>
/// <param name="array">数据</param>
/// <returns></returns>
public static bool IsEmpty(this Array array)
{
return array == null || array.Length == 0;
}
#endregion
#region IsEmpty( )
/// <summary>
/// 判断 可变字符串 是否为空
/// </summary>
/// <param name="sb">数据</param>
/// <returns></returns>
public static bool IsEmpty(this StringBuilder sb)
{
return sb == null || sb.Length == 0 || sb.ToString().IsEmpty();
}
#endregion
#region IsEmpty( )
/// <summary>
/// 判断 泛型集合 是否为空
/// </summary>
/// <typeparam name="T">泛型对象</typeparam>
/// <param name="list">数据</param>
/// <returns></returns>
public static bool IsEmpty<T>(this ICollection<T> list)
{
return null == list || list.Count == 0;
}
#endregion
#region IsEmpty( )
/// <summary>
/// 判断 迭代集合 是否为空
/// </summary>
/// <typeparam name="T">泛型对象</typeparam>
/// <param name="list">数据</param>
/// <returns></returns>
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
return null == list || !list.Any();
}
#endregion
#region IsEmpty()
/// <summary>
/// 判断 字典 是否为空
/// </summary>
/// <typeparam name="TKey">键类型</typeparam>
/// <typeparam name="TValue">值类型</typeparam>
/// <param name="dictionary">数据</param>
/// <returns></returns>
public static bool IsEmpty<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
{
return null == dictionary || dictionary.Count == 0;
}
#endregion
#region GetFirstDayOfMonth()
/// <summary>
/// 获取指定日期的月份第一天
/// </summary>
/// <param name="date">日期</param>
/// <returns>月份第一天</returns>
public static DateTime GetFirstDayOfMonth(this DateTime date)
{
return new DateTime(date.Year, date.Month, 1);
}
/// <summary>
/// 获取指定日期的月份第一天,指定星期几
/// </summary>
/// <param name="date">日期</param>
/// <param name="dayOfWeek">星期几</param>
/// <returns>月份第一天</returns>
public static DateTime GetFirstDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
{
var dt = date.GetFirstDayOfMonth();
while (dt.DayOfWeek != dayOfWeek)
dt = dt.AddDays(1);
return dt;
}
#endregion
#region GetLastDayOfMonth()
/// <summary>
/// 获取指定日期的月份最后一天
/// </summary>
/// <param name="date">日期</param>
/// <returns>最后一天</returns>
public static DateTime GetLastDayOfMonth(this DateTime date)
{
return new DateTime(date.Year, date.Month, GetCountDaysOfMonth(date));
}
/// <summary>
/// 获取指定日期的月份最后一天,指定星期几
/// </summary>
/// <param name="date">日期</param>
/// <param name="dayOfWeek">星期几</param>
/// <returns>最后一天</returns>
public static DateTime GetLastDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
{
var dt = date.GetLastDayOfMonth();
while (dt.DayOfWeek != dayOfWeek)
dt = dt.AddDays(-1);
return dt;
}
#endregion
#region GetCountDaysOfMonth()
/// <summary>
/// 获取月总天数
/// </summary>
/// <param name="date">日期</param>
/// <returns>月总天数</returns>
public static int GetCountDaysOfMonth(this DateTime date)
{
var nextMonth = date.AddMonths(1);
return new DateTime(nextMonth.Year, nextMonth.Month, 1).AddDays(-1).Day;
}
#endregion
#region ToDataTable(List转换成数据表)
/// <summary>
/// 将List转换成数据表
/// </summary>
/// <typeparam name="T">实体类型</typeparam>
/// <param name="entities">List集合</param>
/// <returns></returns>
public static DataTable ToDataTable<T>(this List<T> entities) where T : class
{
DataTable dt = new DataTable();
var properties = typeof(T).GetProperties().ToList();
properties.ForEach(item =>
{
Type colType = item.PropertyType;
if ((colType.IsGenericType) && colType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
colType = colType.GetGenericArguments()[0];
}
dt.Columns.Add(new DataColumn(item.Name) {DataType = colType});
});
entities.ToList().ForEach(item =>
{
var dr = dt.NewRow();
properties.ForEach(property =>
{
var value = property.GetValue(item, null);
dr[property.Name] = value ?? DBNull.Value;
});
dt.Rows.Add(dr);
});
return dt;
}
#endregion
#region SafeValue()
/// <summary>
/// 安全返回值
/// </summary>
/// <typeparam name="T">值类型</typeparam>
/// <param name="value">可空值</param>
/// <returns></returns>
public static T SafeValue<T>(this T? value) where T : struct
{
return value ?? default(T);
}
#endregion
#region SafeString()
/// <summary>
/// 安全转换为字符串去除两端空格当值为null时返回""
/// </summary>
/// <param name="input">输入值</param>
/// <returns></returns>
public static string SafeString(this object input)
{
return input == null ? string.Empty : input.ToString().Trim();
}
#endregion
#region Value()
/// <summary>
/// 获取成员值
/// </summary>
/// <param name="instance">枚举实例</param>
/// <returns></returns>
public static int Value(this Enum instance)
{
return EnumHelper.GetValue(instance.GetType(), instance);
}
#endregion
}
}