关于c#:声明一个队列数组

Declare an array of queues

本问题已经有最佳答案,请猛点这里访问。

我的代码中的语言语法问题是什么?我要声明一组队列。这是申报和使用它们的正确方法吗?

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


第一个问题是语法错误:new Queue[8]()应该是new Queue[8]

一旦用正确的语法声明,当您试图使用数组元素(downBoolArray[0].Enqueue(1)时,您将遇到nullreferenceexception,因为数组元素初始化为其默认值,在引用类型为null的情况下。

您可以使用一行LINQ用非空种子值初始化数组:

1
Queue<int>[] downBoolArray = Enumerable.Range(1,8).Select(i => new Queue<int>()).ToArray();

Range的参数指定我们的序列中需要8个"条目";Select语句为每个项目创建一个新的QueueToArray调用将我们的序列输出为一个数组。


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

1
2
3
4
5
6
7
8
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);
}


您已经创建了一个空值数组。

你想要的是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

}