首页 > 解决方案 > 内置构造数组及其每个元素的方法?

问题描述

通常我想构造一个引用类型数组,然后构造每个元素(数组大小不一定是硬编码的),所以我编写了一个实用函数来做到这一点:

static TElem[] ConstructArray<TElem> (int length) where TElem : new() {
    TElem[] arr = new TElem[length];
    for (int k = 0; k < arr.Length; ++k)
        arr[k] = new TElem();
    return arr;
}

示例用法(可运行):

class Example {
    const int NumberOfLists = 3;
    List<int>[] listInit = ConstructArray<List<int>>(NumberOfLists);
}

我的问题只是:C#(8.0)是否有一种内置的方式来构造一个数组,然后构造每个元素,这样我就可以停止携带那个小实用函数了?


注意:我不是在寻找这个:

X[] array = new X[] { new X(), new X(), new X() };

这将否定这里方便的主要目标。

标签: c#arraysinitializationc#-8.0

解决方案


如果您不介意使用Linq,这里有一个方便的单线:

MyClass[] arrcalc = 
    System.Linq.Enumerable.Range(0, count).Select(x => new MyClass()).ToArray();

使用 Linq 可能有更好的方法,但这很好用。


推荐阅读