2012-11-18 2 views
2

는 내가 가진 :다차원 배열은 암시 적으로 정의 될 때 null 값으로 채워 집니까?

public static BlockQuadrant[] EditModeBlocks = new BlockQuadrant[9];

을하지만 난 그들을 사용하려고 할 때 null 값 예외를 얻고, 분명히 모든 값이 null로 동일하다. 이 값이 BlockQuadrant 클래스 안에 있다고 생각했지만 생성자에서 모든 것을 정의했습니다. 이 경우 null 값 대신 BlockQuadrant의 실제 인스턴스가있는 배열을 채울 수있는 방법이 있습니까?

답변

4

참조 개체의 배열을 구성하면 개체가 아닌 배열 만 구성됩니다. 생성자를 호출하여 개별 객체를 초기화해야합니다.

이 같은 LINQ를 사용하여 바로 가기를 수행 할 수 있습니다

public static BlockQuadrant[] EditModeBlocks = Enumerable 
    .Range(0, 9) 
    .Select(i => new BlockQuadrant()) 
    .ToArray(); 
+0

감사합니다. 훌륭한 작품이지만 어떻게 작동하는지 설명해 주시겠습니까? – Oztaco

+1

@ leaf68'Enumerable.Range (start, count)'는 0부터 8까지 9 개의 숫자로 이루어진 시퀀스를 생성합니다. 'Select (...)'는이 숫자들을 무시하고, 그것들을'new BlockQuadrant()'로 대체합니다. 마지막으로, ToArray()는 결과를 배열로 변환합니다. – dasblinkenlight

2

배열을 반복하는 데 문제가 있습니까? new 요소를 보내고 있습니까?

for (int ii = 0; ii < EditModeBlocks.Length; ii++) 
{ 
    EditModeBlocks[ii] = new BlockQuadrant(); 
} 

초기 성명을 사용하면 기본값으로 배열을 만들었습니다. 참조 유형의 경우 기본값은 null입니다.

0

당신은 배열의 요소에 null이 들어 있으므로 사용하기 전에 배열의 각 요소를 인스턴스화해야합니다.

public static BlockQuadrant[] EditModeBlocks = new BlockQuadrant[9]; 

일부 정적 메서드에서는 루프를 사용하여 인스턴스화합니다.

private static someMethod() 
{ 
    for (int i = 0; i < EditModeBlocks.Length; i++) 
    { 
     EditModeBlocks[i] = new BlockQuadrant(); 
    } 
} 
관련 문제