15

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

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

唯一有效的解决方案?

4

3 回答 3

27

使用构造函数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);
于 2013-01-01T06:22:57.463 回答
4

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

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

由此产生的语言设计是一种“基于模式”的方法。我们依赖用户为其方法使用特定名称,编译器在编写时不会对其进行检查。如果他们在一个程序集中更改 Add to AddPair 的名称,编译器不会抱怨这一点,而是会抱怨位于其他地方的集合初始化程序突然缺少要调用的重载。

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

于 2013-01-01T06:29:37.863 回答
1

试试这个

Queue<int> Q1 = new Queue<int>(new int[] { 1, 2, 3} );
于 2013-01-01T06:25:54.323 回答