2012-09-19 12 views
5

Domyślnie tablica typów referencyjnych zostaje zainicjowana, a wszystkie odniesienia są puste.Łatwy sposób inicjalizacji tablicy typów referencyjnych?

Czy istnieje jakiś rodzaj sztuczki składni do zainicjowania ich za pomocą nowych domyślnych obiektów?

np

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

Nie, tylko oczywiste sposoby na ukrycie pętli (wprowadzenie jej w pomocnika itp.). – dtb

+1

+1 za wskazanie, że chcesz * sztuczka składni *, a nie to, o co większość ludzi pyta - "czy mogę to zrobić bez iterowania tablicy?". Jednak zakładam, że chcesz zachować jakąś czytelność i faktycznie możesz stwierdzić - na pierwszy rzut oka - co kod robi. =) –

Odpowiedz

6

używać LINQ:

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

Ty mógł użycie object and collection initializers, choć wersja jest prawdopodobnie terser i może być stosowany jako jest dla większych zbiorów:

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

Nawet jeśli pętla for wygląda gorzej, niż t on ma fajne zdanie LINQ, że jego zachowanie będzie szybsze. Na przykład. test z 20 Formami w tablicy to 0.7 (dla pętli) do 3.5 (LINQ) milisekundy

Powiązane problemy