给出一个课程:
class clsPerson { public int x, y; }
是否有某种方法可以创建这些类的数组,并将每个元素初始化为(默认)构造的实例,而无需在for循环中手动执行:
clsPerson[] objArr = new clsPerson[1000];
for (int i = 0; i < 1000; ++i)
objArr[i] = new clsPerson();
我可以缩短N个对象数组的声明和实例化吗?
答案 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 Person
。 struct
始终具有默认值。