2012-02-17 90 views
1

如何缩短声明和即时数组的对象?以最简单的方式实例化一个对象数组?

class clsPerson{public int x, y;}

...

clsPerson[] objArr = new clsPerson[1000]; //How invoke here constructor? without creating for loop and objArr[i] = new clsPerson();

+4

只是好奇:为什么将它命名为'clsPerson'而不是'Person'?很明显,这是一门课 - 大部分课程都是课堂。 – 2012-02-17 18:11:09

+0

http://stackoverflow.com/a/1739047/932418 – 2012-02-17 18:19:37

+0

我想我可以(羞愧地)回答这个问题。这是一个古老的VB6命名类的方式 - 不是我当然会知道的:-) – 2012-02-17 18:23:04

回答

7

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

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

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(); 
+0

嗯,我知道这很简单,但我看到很多功能,如: 列表 list = new List ({1,2,3}); 或 foreach(字符串在新字符串[] {“aaa”,“bbb”}) – mike00 2012-02-17 18:15:37

+0

@Maniekb好吧,正如我所说 - 你可以使用LINQ来做到这一点,但我个人会避免在这种情况下.. 。 – 2012-02-17 18:17:52

+0

@Maniekb但是当然你可以使用数组初始值设定语法,如果你想在初始化程序中输入'new clsPerson()'1000次。 – phoog 2012-02-17 18:30:10

12

在此场景中,必须为阵列中的每个项目运行构造函数。无论是否使用循环,都必须访问数组中的每个元素的集合初始化程序或辅助方法。

如果你只是想找一个方便的语法虽然你可以使用下面的

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

谢谢,但我的意思是别的。好的模板:)。阵列[I] = .. – mike00 2012-02-17 18:20:01

0

如果这将是有意义的话,你可以改变class clsPersonstruct Personstruct s总是有一个默认值。

相关问题