2010-10-06 66 views
2

我有自定义对象MyClass,我需要创建它的3个实例。如何在C#中创建对象的数组或ArrayList?

而不是做了愚蠢的事情一样的:

MyClass instance1 = new MyClass(); 
MyClass instance2 = new MyClass(); 
MyClass instance3 = new MyClass(); 

不应该我可以做这样的事情:

MyClass[] instances = new MyClass(); 

instances[0].somemethod; 

回答

3
MyClass[] instances = new MyClass[3]; 

for (int i = 0; i < instances.Length; i++) 
    instances[i] = new MyClass(); 
7

就做一个循环内:

MyClass[] instances=new MyClass[3]; 
for(int i=0;i<3;i++) 
{ 
    instances[i]= new MyClass(); 
} 

或者直接创建数组:

MyClass[] instances= new MyClass[]{new MyClass(), new MyClass(), new MyClass()}; 
2

使用

MyClass[] instances = new MyClass[num]; 
for (int i=0; i<num; i++) 
{ 
    instances[i]=new MyClass(); 
} 

MyClass[] instances = new MyClass[]{ new MyClass(), new MyClass(), new MyClass()}; 
1

使用LINQ:

MyClass[] instances Enumerable.Range(0, 3).Select(_ => new MyClass()).ToArray(); 

起始值0没关系,我们只是想一些IEnumerable的3个要素。或者,Enumerable.Repeat也可以工作,再次忽略第一个参数。

+0

不必要的“聪明”,不可读。 – Timwi 2010-10-06 22:17:41

+0

也许不必要的聪明,但几乎不可读。 – Davy8 2010-10-06 22:54:28

+0

@Timwi:errmm,什么?该代码与手动实现for循环的版本完全相同,我没有发现它更多或更少的巧妙。也许可读性可以通过在linq方法之后添加换行符来改进。 – Juliet 2010-10-07 00:24:22

2

如何使用LINQ?

MyClass[] instances = Enumerable.Repeat(0, 3).Select(i => new MyClass()).ToArray(); 

性能考虑事项留给读者阅读。 ;-)

+0

这几乎就是我的!看到我们的答案分开多少秒了,太迟了。 – Davy8 2010-10-06 21:40:47

+0

我想你实际上是一头发打我! – 2010-10-06 21:56:59

+2

不必要的“聪明”,不可读。 – Timwi 2010-10-06 22:17:05