mik*_*e00 2 c# arrays constructor object new-operator
给出一个类:
class clsPerson { public int x, y; }
Run Code Online (Sandbox Code Playgroud)
有没有办法创建这些类的数组,每个元素初始化为(默认)构造的实例,而不是在for循环中手动执行,如:
clsPerson[] objArr = new clsPerson[1000];
for (int i = 0; i < 1000; ++i)
objArr[i] = new clsPerson();
Run Code Online (Sandbox Code Playgroud)
我可以缩短N个对象数组的声明和实例化吗?
Jar*_*Par 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);
Run Code Online (Sandbox Code Playgroud)
您必须为每个项目调用构造函数.在没有构造每个项目的情况下,无法分配数组并在项目上调用类构造函数.
你可以使用以下方法从循环中缩短它(一点点):
clsPerson[] objArr = Enumerable.Range(0, 1000).Select(i => new clsPerson()).ToArray();
Run Code Online (Sandbox Code Playgroud)
就个人而言,我仍然会分配数组并循环遍历它(和/或将其移动到辅助程序例程中),因为它非常清晰且仍然相当简单:
clsPerson[] objArr = new clsPerson[1000];
for (int i=0;i<1000;++i)
clsPerson[i] = new clsPerson();
Run Code Online (Sandbox Code Playgroud)