You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需手动逐个初始化,用默认构造函数初始化C#引用类型数组?

初始化C#引用类型数组的简便方法

嘿,我完全懂你不想手动调用100000次new Person()的崩溃感——谁愿意做这种机械重复的工作啊!其实除了for循环,C#确实有更简洁的方式来批量初始化引用类型数组,下面给你几种实用的方案:

1. 使用LINQ的Enumerable.Range + Select + ToArray

这是最常用的简洁写法,一行代码就能搞定:

Person[] people = Enumerable.Range(0, 100000)
                            .Select(_ => new Person())
                            .ToArray();

这里Enumerable.Range(0, 100000)生成0到99999的整数序列,然后Select把每个整数映射成一个新的Person对象,最后ToArray()把序列转换成数组。如果你的Person构造需要参数,也可以直接传入,比如:

Person[] people = Enumerable.Range(0, 100000)
                            .Select(i => new Person($"Person_{i}"))
                            .ToArray();

2. 用Array.ForEach批量初始化

先创建指定长度的空数组(此时所有元素都是null),再通过Array.ForEach遍历初始化每个元素:

Person[] people = new Person[100000];
Array.ForEach(people, (ref Person p) => p = new Person());

3. 自定义扩展方法(复用性更高)

如果你经常需要做这种批量初始化,可以封装一个扩展方法,后续使用更省心:

public static class ArrayExtensions
{
    public static T[] InitializeArray<T>(int length) where T : new()
    {
        T[] array = new T[length];
        for (int i = 0; i < length; i++)
        {
            array[i] = new T();
        }
        return array;
    }
}

调用时只需一行:

Person[] people = ArrayExtensions.InitializeArray<Person>(100000);

性能小提醒

如果对性能要求极高,手动写for循环是最快的(LINQ会带来极轻微的额外开销,10万量级几乎可忽略):

Person[] people = new Person[100000];
for (int i = 0; i < people.Length; i++)
{
    people[i] = new Person();
}

日常开发中,LINQ写法的简洁性和可读性往往更值得优先考虑。

内容的提问来源于stack exchange,提问作者Christopher Pisz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:23:13