double[][][] threeDimensionArray =
Enumerable.Range(0, 1)
.Select(h1 => Enumerable.Range(0, 2)
.Select(h2 => new double[3])
.ToArray())
.ToArray();
但这需要多次ToArray()
调用来进行内存复制(请参见下面的实现),因此对于大量项目而言,它效率不高,因此这种“优雅”的解决方案不是免费的。顺便说一句,我更喜欢for
循环解决方案。
Enumerable.ToArray()
实施:(归功于ILSpy)
// System.Linq.Enumerable
public static TSource[] ToArray<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
// sll: see implementation of Buffer.ToArray() below
return new Buffer<TSource>(source).ToArray();
}
// System.Linq.Buffer<TElement>
internal TElement[] ToArray()
{
if (this.count == 0)
{
return new TElement[0];
}
if (this.items.Length == this.count)
{
return this.items;
}
TElement[] array = new TElement[this.count];
Array.Copy(this.items, 0, array, 0, this.count);
return array;
}