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