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

时间:2012-02-17 18:08:42

标签: c# arrays object constructor new-operator

给出一个课程:

class clsPerson { public int x, y; }

是否有某种方法可以创建这些类的数组,并将每个元素初始化为(默认)构造的实例,而无需在for循环中手动执行:

clsPerson[] objArr = new clsPerson[1000];

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

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

3 个答案:

答案 0 :(得分:13)

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

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

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);

答案 1 :(得分:8)

您必须为每个项目调用构造函数。在没有构造每个项目的情况下,无法分配数组并在项目上调用类构造函数。

你可以使用:

从循环中缩短它(一点点)
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(); 

答案 2 :(得分:0)

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