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]会给您一个null引用数组
- 哦!!我添加了错误!谢谢。
- 数组由空对象组成。首先在数组中实例化队列。
- 埃多克斯1〔3〕
第一个问题是语法错误: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语句为每个项目创建一个新的Queue;ToArray调用将我们的序列输出为一个数组。
您需要初始化数组中的每个元素
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);
} |
- 请添加您的代码在做什么以及为什么,否则它不会增加太多。
- 谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 你是说downBoolArray.Length;而不是downBoolArray.Count();。
- @拉文尼克斯:增加了解释
- @丹尼斯:长度也可以
- @Dennis eu an array是一个IEnumerable,因此在这种情况下,length和count()都起作用。
- Count()也可以,但这不是重点。Count()做不必要的工作。在访问数组中的项数时,我们总是使用.Length。
- @丹尼斯:更新了答案
- @Dennis_e如果基础集合实现了哪个数组执行的ICollection,那么调用Count()的成本不会比调用Length的成本高。
- @马格纳斯仍然不重要。Count()仍然做不必要的铸造。我们使用.Length来访问数组中的项数。没有理由使用.Count()。很奇怪。
您已经创建了一个空值数组。
你想要的是这样的:
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
} |
号