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

问题描述 投票:0回答:3

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

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

唯一有效的解决方案?

c# stack queue
3个回答
37
投票

使用构造函数

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

4
投票

请参阅 Mads Torgersen 的这篇博文,特别是:

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

最终的语言设计是一种“基于模式”的方法。我们依靠 用户以某种方式为其方法使用特定名称 编译器在编写时没有检查。如果他们去改变 在一个程序集中添加到 AddPair 的名称,编译器不会 抱怨这一点,而是抱怨集合初始值设定项 坐在其他地方突然错过了一个超载的呼叫。

队列不支持

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


2
投票

试试这个

Queue<int> Q1 = new Queue<int>(new int[] { 1, 2, 3} );
© www.soinside.com 2019 - 2024. All rights reserved.