/// <summary> /// 从当前数组的指定索引开始截取指定长度的一部分。 /// 如果 <paramref name="startIndex"/> 小于 <c>0</c>, /// 那么表示从字符串结束位置向前计算的位置。 /// </summary> /// <typeparam name="T">数组中元素的类型。</typeparam> /// <param name="array">要截取的数组。</param> /// <param name="startIndex">要截取的起始索引。</param> /// <param name="length">要截取的数组元素个数。</param> /// <returns>截取得到的数组。</returns> /// <exception cref="System.ArgumentNullException"> /// <paramref name="array"/> 为 <c>null</c>。</exception> /// <exception cref="System.ArgumentOutOfRangeException"> /// <paramref name="startIndex"/> 小于负的此数组的长度。</exception> /// <exception cref="System.ArgumentOutOfRangeException"> /// <paramref name="length"/> 小于 <c>0</c>。</exception> /// <exception cref="System.ArgumentOutOfRangeException"> /// <paramref name="startIndex"/> 加 <paramref name="length"/> /// 之和指示的位置不在此数组中。</exception> public static T[] Subarray <T>(this T[] array, int startIndex, int length) { if (array == null) { throw ExceptionHelper.ArgumentNull("array"); } if (startIndex < -array.Length) { throw ExceptionHelper.ArgumentOutOfRange("startIndex"); } if (length < 0 || startIndex + length > array.Length) { throw ExceptionHelper.InvalidOffsetLength(); } Contract.Ensures(Contract.Result <T[]>() != null); if (length == 0) { return(Empty <T>()); } if (startIndex < 0) { startIndex += array.Length; } return(SubarrayInternal(array, startIndex, startIndex + length)); }