声明一个队列数组
Declare an array of queues
我的代码中存在什么语言语法问题?
我想声明一个队列数组。这是声明和使用它们的正确方法吗?
public static void Main(string[] args)
{
Queue<int>[] downBoolArray = new Queue<int>[8]();
downBoolArray[0].Enqueue(1);
}
您需要初始化数组中的每个元素
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);
}
您已经创建了一个包含 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
}
你的第一个问题是语法错误:new Queue<int>[8]()
应该是 new Queue<int>[8]
.
一旦使用正确的语法声明,当您尝试使用数组的元素 (downBoolArray[0].Enqueue(1)
) 时,您将遇到 NullReferenceException because array elements initialise to their default values,在引用类型的情况下为 null
.
您可以改为使用一行 LINQ 以非空种子值初始化您的数组:
Queue<int>[] downBoolArray = Enumerable.Range(1,8).Select(i => new Queue<int>()).ToArray();
Range
的参数指定我们的序列中需要 8 个 'entries'; Select
语句为每个项目创建一个新的 Queue<int>
; ToArray
调用将我们的序列输出为数组。
我的代码中存在什么语言语法问题? 我想声明一个队列数组。这是声明和使用它们的正确方法吗?
public static void Main(string[] args)
{
Queue<int>[] downBoolArray = new Queue<int>[8]();
downBoolArray[0].Enqueue(1);
}
您需要初始化数组中的每个元素
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);
}
您已经创建了一个包含 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
}
你的第一个问题是语法错误:new Queue<int>[8]()
应该是 new Queue<int>[8]
.
一旦使用正确的语法声明,当您尝试使用数组的元素 (downBoolArray[0].Enqueue(1)
) 时,您将遇到 NullReferenceException because array elements initialise to their default values,在引用类型的情况下为 null
.
您可以改为使用一行 LINQ 以非空种子值初始化您的数组:
Queue<int>[] downBoolArray = Enumerable.Range(1,8).Select(i => new Queue<int>()).ToArray();
Range
的参数指定我们的序列中需要 8 个 'entries'; Select
语句为每个项目创建一个新的 Queue<int>
; ToArray
调用将我们的序列输出为数组。