使用默认值初始化队列或堆栈?

时间:2013-01-01 06:21:59

标签: c# stack queue

您可以使用预先放置的值初始化列表:

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);

唯一有效的解决方案?

3 个答案:

答案 0 :(得分:21)

使用构造函数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);

答案 1 :(得分:3)

请参阅:http://blogs.msdn.com/b/madst/archive/2006/10/10/what-is-a-collection_3f00_.aspx,特别是:

  

这种新语法的含义只是创建一个实例   MyNames使用其无参数构造函数(构造函数参数可以是   必要时提供)并使用每个调用其Add方法   字符串。

  

由此产生的语言设计是一种“基于模式”的方法。我们依靠   对于以某种方式使用特定名称的方法的用户   编译时没有由编译器检查。如果他们去改变   在一个程序集中添加到AddPair的名称,编译器不会   抱怨这个,而是关于一个集合初始化器   坐在其他地方的人突然错过了一个超负荷的电话。

队列不支持Add方法,因此无法使用短表达式样式语法进行初始化。这真的是设计的选择。幸运的是,您可以将一个集合传递给Queue的构造函数。

答案 2 :(得分:1)

试试这个

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