代码语言:javascript复制
/// <summary>
///
/// </summary>
public static class IEnumerableExtentions
{
/// <summary>
/// 复制序列中的数据
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="iEnumberable">原数据</param>
/// <param name="startIndex">原数据开始复制的起始位置</param>
/// <param name="length">需要复制的数据长度</param>
/// <returns></returns>
public static IEnumerable<T> Copy<T>(this IEnumerable<T> iEnumberable, int startIndex, int length)
{
var sourceArray = iEnumberable.ToArray();
T[] newArray = new T[length];
Array.Copy(sourceArray, startIndex, newArray, 0, length);
return newArray;
}
/// <summary>
/// 给IEnumerable拓展ForEach方法
/// </summary>
/// <typeparam name="T">模型类</typeparam>
/// <param name="iEnumberable">数据源</param>
/// <param name="func">方法</param>
public static void ForEach<T>(this IEnumerable<T> iEnumberable, Action<T> func)
{
foreach (var item in iEnumberable)
{
func(item);
}
}
/// <summary>
/// 给IEnumerable拓展ForEach方法
/// </summary>
/// <typeparam name="T">模型类</typeparam>
/// <param name="iEnumberable">数据源</param>
/// <param name="func">方法</param>
public static void ForEach<T>(this IEnumerable<T> iEnumberable, Action<T, int> func)
{
var array = iEnumberable.ToArray();
for (int i = 0; i < array.Count(); i )
{
func(array[i], i);
}
}
/// <summary>
/// 分块
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="chunkSize"></param>
/// <returns></returns>
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunkSize)
{
return source
.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index / chunkSize)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();
}