C#中如何不使用循环初始化对象数组?
无需循环初始化A类型数组的实现方案
当然可以,你不需要手动编写for或foreach循环就能完成这个数组的初始化,以下是几种可行的方式:
使用LINQ的Enumerable.Range + Select
这是动态n场景下最常用的方案,借助LINQ的序列生成和映射能力实现:using System.Linq; // 需要引用这个命名空间 int n = 10; A[] arrayA = Enumerable.Range(0, n) .Select(i => new A($"item{i}")) .ToArray();原理:
Enumerable.Range(0, n)生成从0到n-1的整数序列,Select把每个整数转换成对应的A实例,最后ToArray()将序列转为数组。固定n时使用数组初始化器
如果n是已知的固定值(比如示例中的10),可以直接写出数组的所有元素:A[] arrayA = new A[] { new A("item0"), new A("item1"), new A("item2"), new A("item3"), new A("item4"), new A("item5"), new A("item6"), new A("item7"), new A("item8"), new A("item9") };这种方式完全没有循环,但只适合n固定且数值不大的场景,动态n时不适用。
使用Array.ConvertAll
借助Array.ConvertAll方法将整数数组直接转换为A类型数组:using System.Linq; int n = 10; A[] arrayA = Array.ConvertAll(Enumerable.Range(0, n).ToArray(), i => new A($"item{i}"));本质和LINQ方案类似,只是转换方式更直接。
需要注意的是:除了固定n的数组初始化器,其他方案内部其实依然存在循环逻辑,但这些循环是.NET框架底层实现的,不需要你手动编写。如果是追求完全无任何循环的实现,只有固定n的场景才能做到。
内容的提问来源于stack exchange,提问作者user21386820
相关产品推荐
相关产品推荐

