/// <summary> /// 从特定的 <see cref="Array"/> 索引处开始,将指定集合 /// 的元素复制到一个 <see cref="Array"/> 中。 /// </summary> /// <param name="source">要复制元素的集合。</param> /// <param name="array">从 <paramref name="source"/> 复制的元素的目标位置的一维 /// <see cref="Array"/>。<paramref name="array"/> 必须具有从零开始的索引。</param> /// <param name="index"><paramref name="array"/> 中从零开始的索引,在此处开始复制。</param> /// <exception cref="ArgumentNullException"><paramref name="array"/> 为 <c>null</c>。</exception> /// <exception cref="ArgumentOutOfRangeException"><paramref name="index"/> 小于 <c>0</c>。</exception> /// <exception cref="ArgumentException"><paramref name="array"/> 是多维的。</exception> /// <exception cref="ArgumentException"><paramref name="source"/> /// 中的元素数目大于从 <paramref name="index"/> 到目标 <paramref name="array"/> /// 末尾之间的可用空间。</exception> /// <exception cref="ArgumentException"><paramref name="source"/> /// 的类型无法自动转换为目标 <paramref name="array"/> 的类型。</exception> public static void CopyTo <T>(ICollection <T> source, Array array, int index) { Contract.Requires(source != null); if (array == null) { throw CommonExceptions.ArgumentNull("array"); } if (array.Rank != 1) { throw CommonExceptions.ArrayRankMultiDimNotSupported(); } if (array.GetLowerBound(0) != 0) { throw CommonExceptions.ArrayNonZeroLowerBound("array"); } if (index < 0) { throw CommonExceptions.ArgumentNegative("index", index); } if (array.Length - index < source.Count) { throw CommonExceptions.ArrayTooSmall("array"); } Contract.EndContractBlock(); T[] arr = array as T[]; if (arr != null) { foreach (T obj in source) { arr[index++] = obj; } } else { try { foreach (T obj in source) { array.SetValue(obj, index++); } } catch (InvalidCastException ex) { throw CommonExceptions.InvalidArrayType(ex); } } }