¿Es posible hacer eso en C#?¿Es posible crear una cola usando {a, b, c} en C#?
Queue<string> helperStrings = {"right", "left", "up", "down"};
o tengo que producir una matriz primero para eso?
¿Es posible hacer eso en C#?¿Es posible crear una cola usando {a, b, c} en C#?
Queue<string> helperStrings = {"right", "left", "up", "down"};
o tengo que producir una matriz primero para eso?
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.
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" });
¿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.
Gracias por esa explicación, eso ayuda mucho a comprender la mecánica subyacente. – xeophin
Entonces los intializadores de la colección son básicamente azúcares sintácticos, ¿no es así? – digEmAll
@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. –
+1 Sí, creaste una matriz primero, pero se ve bonita :) – Onkelborg
Bien ... habría sido demasiado conveniente para ser verdad;) ¡Gracias! – xeophin
¿No requiere este método desempaquetar las cadenas? ¿La 'nueva Lista {" A "," B "," C "}' sería mejor? –