2012-09-19 9 views
5

De forma predeterminada, una matriz de tipos de referencia se inicializa con todas las referencias como nulas.¿Forma fácil de inicializar una matriz de tipos de referencia?

¿Hay algún tipo de truco de sintaxis para inicializarlos con nuevos objetos predeterminados?

por ejemplo

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

No, solo las formas obvias de ocultar el bucle (poniéndolo en un método de ayuda, etc.). – dtb

+1

+1 para señalar que desea un * truco de sintaxis *, no lo que la mayoría de la gente pregunta: "¿Puedo hacer esto sin iterar la matriz?". Sin embargo, supongo que desea mantener algún tipo de legibilidad y, de hecho, ser capaz de decir, de un vistazo, lo que hace el código. =) –

Respuesta

6

uso de LINQ:

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

Usted podía uso object and collection initializers, aunque su versión es probablemente más concisa y se puede utilizar tal cual para las colecciones más grandes:

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

Incluso si su bucle for se ve peor que t Es una buena declaración de LINQ, el comportamiento en el tiempo de ejecución será mucho más rápido. P.ej. una prueba con 20 Formas en una matriz es 0.7 (para bucle) a 3.5 (LINQ) milisegundos

Cuestiones relacionadas