以最简单的方式实例化一个对象数组

本文关键字:一个对象 数组 实例化 方式 最简单 | 更新日期: 2023-09-27 18:24:55

给定一个类:

class clsPerson { public int x, y; }

有没有办法创建一个这些类的数组,每个元素都初始化为一个(默认)构造的实例,而不需要在像这样的for循环中手动执行:

clsPerson[] objArr = new clsPerson[1000];
for (int i = 0; i < 1000; ++i)
    objArr[i] = new clsPerson();

我可以缩短N个对象数组的声明和实例化吗?

以最简单的方式实例化一个对象数组

在这种情况下,必须为数组中的每个项运行构造函数。无论是否使用循环、集合初始值设定项或辅助方法,都必须访问数组中的每个元素。

如果你只是在寻找一个方便的语法,你可以使用以下

public static T[] CreateArray<T>(int count) where T : new() {
  var array = new T[count];
  for (var i = 0; i < count; i++) {
    array[i] = new T();
  }
  return array;
}
clsPerson[] objArary = CreateArray<clsPerson>(1000);

您必须为每个项调用构造函数。如果不构造每个项,就无法分配数组并在项上调用类构造函数。

你可以使用从循环中缩短它(一点点)

clsPerson[] objArr = Enumerable.Range(0, 1000).Select(i => new clsPerson()).ToArray();

就我个人而言,我仍然会分配数组并在其中循环(和/或将其移动到辅助例程中),因为它非常清楚,而且仍然相当简单:

clsPerson[] objArr = new clsPerson[1000];
for (int i=0;i<1000;++i) 
   clsPerson[i] = new clsPerson(); 

如果这样做有意义,可以将class clsPerson更改为struct Personstruct始终具有默认值。