2013-01-01 9 views
7

można zainicjować z listy wstępnie umieszczane wartości:Inicjowanie kolejki lub stosu z wartościami domyślnymi?

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

istnieje odpowiednik powyżej kolejce? Mój pomysł był następujący:

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

który nie działa. Czy istnieje jakieś obejście?

Czy

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

jedyny ważny rozwiązanie?

Odpowiedz

14

użyć konstruktora Queue<T> Constructor (IEnumerable<T>)

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

Albo

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

To rozwiązanie wymaga utworzenia kolekcji pośredniej. Rozwiązanie opisane w pytaniu nie. Oczywiście, że to oczywiste. Ale chcę podkreślić, że ktoś tęskni za tym :). –

1

Spróbuj

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

zobacz: http://blogs.msdn.com/b/madst/archive/2006/10/10/what-is-a-collection_3f00_.aspx a szczególnie:

Znaczenie tej nowej składni polega po prostu na utworzeniu instancji MyNames przy użyciu jej konstruktora no-arg (argumenty konstruktora mogą być podane w razie potrzeby jako ) i wywołanie jej metody Add z każdym z ciągów .

i

Powstały projekt język jest „wzór oparty” podejście. Opieramy się na na użytkownikach używających konkretnej nazwy dla ich metod w sposób, który jest niezaznaczony przez kompilator podczas ich zapisywania. Jeśli zmienią one nazwę na nazwę Add to AddPair w jednym zestawie, kompilator nie będzie się na nią skarżył , ale zamiast tego inicjator kolekcji siedzi gdzie indziej, nagle tracąc przytomność.

Kolejka nie obsługuje metody dodawania, dlatego nie można jej zainicjować za pomocą składni stylu krótkiego wyrażenia. To naprawdę wybór według projektu. Na szczęście możesz przekazać kolekcję do konstruktora kolejki.