2010-10-26 12 views

Respuesta

16

No, no puede inicializar una cola de esa manera.

De todos modos, se puede hacer algo como esto:

var q = new Queue<string>(new[]{ "A", "B", "C" }); 

y esto, obviamente, significa pasar a través de una matriz.

+0

+1 Sí, creaste una matriz primero, pero se ve bonita :) – Onkelborg

+0

Bien ... habría sido demasiado conveniente para ser verdad;) ¡Gracias! – xeophin

+0

¿No requiere este método desempaquetar las cadenas? ¿La 'nueva Lista {" A "," B "," C "}' sería mejor? –

3

Como Queue<T> no implementa un método de 'Añadir', tendrá que crear una instancia del IEnumerable<string> de la que se puede inicializar:

Queue<string> helperStrings 
    = new Queue<string>(new List<string>() { "right", "left", "up", "down" }); 
12

¿Es posible hacer eso en C#?

Desafortunadamente no.

La regla para los inicializadores de recopilación en C# es que el objeto debe (1) implementar IEnumerable y (2) tener un método Add. El inicializador de colección

new C(q) { r, s, t } 

se reescribe como

temp = new C(q); 
temp.Add(r); 
temp.Add(s); 
temp.Add(t); 

y luego da lugar a lo que está en temp.

Queue<T> implementa IEnumerable pero no tiene un método Add; tiene un método Enqueue.

+0

Gracias por esa explicación, eso ayuda mucho a comprender la mecánica subyacente. – xeophin

+0

Entonces los intializadores de la colección son básicamente azúcares sintácticos, ¿no es así? – digEmAll

+2

@digEmAll: eso es correcto. La dulzura del azúcar aquí es doble. Primero, que son muy compactos. Segundo, que convierten lo que anteriormente habría sido un grupo de declaraciones en una expresión; eso significa que puede usarlos en contextos donde solo una expresión es válida, como un inicializador de campo o una consulta LINQ. –

Cuestiones relacionadas