声明队列数组

时间:2018-02-09 15:12:36

标签: c# arrays syntax array-initialization

我的代码中的语言语法问题是什么? 我想声明一个队列数组。这是宣告和使用它们的正确方法吗?

   public static void Main(string[] args)
    {
        Queue<int>[] downBoolArray = new Queue<int>[8]();
        downBoolArray[0].Enqueue(1);
    }

3 个答案:

答案 0 :(得分:2)

您的第一个问题是语法错误:new Queue<int>[8]()应为new Queue<int>[8]

使用正确的语法声明后,当您尝试使用数组元素(downBoolArray[0].Enqueue(1))时,您会遇到NullReferenceException因为数组元素initialisedefault values在引用类型的情况下,null

您可以使用单行LINQ:

来使用非空种子值初始化数组
Queue<int>[] downBoolArray = Enumerable.Range(1,8).Select(i => new Queue<int>()).ToArray();

Range的论据指出我们需要8个条目&#39;在我们的序列中; Select语句为每个项目创建一个新的Queue<int>;并且ToArray调用将序列输出为数组。

答案 1 :(得分:0)

您需要初始化数组中的每个元素

void Main()
{
    Queue<int>[] downBoolArray =new Queue<int>[10];

    for (int i = 0; i < downBoolArray.Length; i++)
        downBoolArray[i] = new Queue<int>();
    downBoolArray[0].Enqueue(1);
}

答案 2 :(得分:-2)

您已创建了 null 值数组。

你想要的是这样的:

public static void Main(string[] args) {

    var queues = new Queue<int>[8];

    // Possibly some other stuff

    // Initialise all values
    for (var i = 0; i < queues.Length; i++) {
        // Accounting for maybe already sporadically initialising values
        queues[i] = (queues[i]) ?? new Queue<int>();

    }
    // Do whatever

}