2012-09-19 5 views
5

기본적으로 참조 유형의 배열은 모든 참조가 null로 초기화됩니다.참조 유형의 배열을 초기화하는 쉬운 방법은 무엇입니까?

대신 새로운 기본 개체로 초기화하는 구문 트릭이 있습니까?

예를 들어

public class Child 
{ 
} 

public class Parent 
{ 
    private Child[] _children = new Child[10]; 

    public Parent() 
    { 
     //any way to negate the need for this? 
     for (int n = 0; n < _children.Length; n++) 
      _children[n] = new Child(); 
    } 
} 
+0

아니요. 루프를 숨기려는 확실한 방법입니다 (도우미 메서드에 넣는 등). – dtb

+1

+1 * 대부분의 사람들이 요구하지 않는 * 구문 트릭 *을 원한다는 것을 지적하기 위해 +1 - "배열을 반복하지 않고 이것을 할 수 있습니까?" 그러나 일종의 가독성을 유지하면서 실제로 코드가하는 일을 한눈에 알 수 있다고 가정합니다. =) –

답변

6

사용 LINQ :

private Child[] _children = Enumerable 
           .Range(1, 10) 
           .Select(i => new Child()) 
           .ToArray(); 
3

당신 사용 object and collection initializers, 버전이 아마 terser하고 큰 컬렉션을위한로 사용할 수 있지만 :

private Child[] _children = new Child[] { 
new Child(), 
new Child(), 
new Child(), 
new Child(), 
new Child(), 
new Child(), 
new Child(), 
new Child(), 
new Child() 
}; 
0

for 루프가 t보다 더 나빠 보이더라도 그는 좋은 LINQ 문을 그것의 런타임 동작이 훨씬 더 빠를 것입니다. 예 : 배열에서 20 개의 폼을 사용하는 테스트는 0.7 (for 루프)에서 3.5 (LINQ) 밀리 초까지입니다.

관련 문제