2013-01-01 13 views
7

è possibile inizializzare un elenco con i valori pre-posizionato:Inizializzazione coda o pila con valori predefiniti?

List<int> L1 = new List<int> {1, 2, 3};

c'è un equivalente di sopra per la coda? La mia idea era:

Queue<int> Q1 = new Queue<int> {1, 2, 3};

che non funziona. C'è qualche soluzione?

È

Queue<int> Q1 = new Queue<int>(); 
Q1.Enqueue(1); 
Q1.Enqueue(2); 
Q1.Enqueue(3); 

l'unica soluzione valida?

risposta

14

utilizzare il costruttore Queue<T> Constructor (IEnumerable<T>)

Queue<int> Q1 = new Queue<int>(new[] { 1, 2, 3 }); 

O

List<int> list = new List<int>{1, 2, 3 }; 
Queue<int> Q1 = new Queue<int>(list); 
+2

Questa soluzione richiede l'istanziazione della raccolta intermedia. La soluzione descritta in questione non lo fa. Certo che lo è ovviamente. Ma voglio sottolineare se qualcuno lo manca :). –

1

Prova questo

Queue<int> Q1 = new Queue<int>(new int[] { 1, 2, 3}); 
1

See: http://blogs.msdn.com/b/madst/archive/2006/10/10/what-is-a-collection_3f00_.aspx ed in particolare:

Il significato di questa nuova sintassi consiste semplicemente nel creare un'istanza di MyNames utilizzando il suo costruttore no-arg (gli argomenti del costruttore possono essere forniti se necessario) e chiamare il relativo metodo Add con ognuna delle stringhe .

e

Il design lingua risultante è un “modello base” approccio. Facciamo affidamento su agli utenti che utilizzano un nome particolare per i loro metodi in un modo che è non controllato dal compilatore quando lo scrivono. Se vanno e cambiano il nome di Aggiungi a AddPair in un assembly, il compilatore non si opporrà a , ma invece a un inizializzatore di raccolta seduto da qualche altra parte improvvisamente manca un sovraccarico per chiamare.

Una coda non supporta il metodo Aggiungi e pertanto non può essere inizializzata con la sintassi dello stile di espressione breve. Questa è davvero una scelta di design. Fortunatamente, puoi passare una raccolta al costruttore della Queue.

Problemi correlati