2013-01-01 86 views
7

可以與預置值初始化的列表:使用默認值初始化隊列或堆棧?

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

是存在的上述隊列的等效?我的想法是:

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

不工作。有什麼解決方法嗎?

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

唯一有效的解決方案嗎?

回答

14

使用構造Queue<T> Constructor (IEnumerable<T>)

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

或者

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

該解決方案需要實例化中間集合。問題描述的解決方案沒有。當然很明顯。但是如果有人想念它,就要強調:)。 –

1

試試這個

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

見:http://blogs.msdn.com/b/madst/archive/2006/10/10/what-is-a-collection_3f00_.aspx特別:

此新語法的含義僅僅是使用其無參數構造函數創建一個實例 MyNames(如果需要,可以使用構造函數參數 ),並使用每個 字符串調用其Add方法。

所得語言設計方法「基於模式」。我們依靠 上的用戶使用他們的方法的特定名稱,而 在編寫時未被編譯器檢查。如果他們改變 在一個程序集中添加到AddPair的名稱,編譯器就不會抱怨 ,而是關於一個集合初始化程序 ,它坐在別的地方突然失去了調用的重載。

隊列不支持Add方法,因此無法使用短表達式樣式語法進行初始化。這是真正的設計選擇。幸運的是,您可以將一個集合傳遞給Queue的構造函數。