【问题标题】:Initializing Queue or Stack with default values?使用默认值初始化队列或堆栈?
【发布时间】:2012-12-16 00:15:21
【问题描述】:

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

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


    【解决方案1】:

    使用构造函数Queue&lt;T&gt; Constructor (IEnumerable&lt;T&gt;)

    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】:

    试试这个

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-10
        • 2017-11-22
        • 1970-01-01
        • 2014-12-29
        • 1970-01-01
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多