【问题标题】:Declare an array of queues [duplicate]声明一个队列数组[重复]
【发布时间】:2018-02-09 15:12:36
【问题描述】:

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

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

【问题讨论】:

  • 正如错误告诉你的那样,你不能把括号放在结束 ] 之后 - 尽管删除括号 (new Queue&lt;int&gt;[8]) 会给你一个 null 引用数组
  • 哦!我添加了我得到的错误!谢谢。
  • 您的数组由空对象组成。首先实例化数组中的队列。
  • Queue&lt;int&gt;[] downBoolArray = new Queue&lt;int&gt;[8]; downBoolArray[0] = new Queue&lt;int&gt;(); downBoolArray[0].Enqueue(1);

标签: c# arrays syntax array-initialization


【解决方案1】:

您的第一个问题是语法错误:new Queue&lt;int&gt;[8]() 应该是 new Queue&lt;int&gt;[8]

一旦使用正确的语法声明,当您尝试使用数组元素 (downBoolArray[0].Enqueue(1)) 时,您将遇到 NullReferenceException,因为数组元素 initialise 到它们的 default values,在引用的情况下类型是null

您可以改为使用单行 LINQ 用非空种子值初始化您的数组:

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

Range 的参数指定我们在序列中需要 8 个“条目”; Select 语句为每个项目创建一个新的Queue&lt;int&gt;ToArray 调用将我们的序列输出为一个数组。

【讨论】:

    【解决方案2】:

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

    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);
    }
    

    【讨论】:

    • 请添加您的代码在做什么以及为什么,否则不会添加太多。
    • 非常感谢!!!!!!!!!!!!!!!!!!!!!!!!
    • @Ravenix : 添加解释
    • @Dennis_E 数组是一个 IEnumerable,因此 Length 和 Count() 在这种情况下都有效。
    【解决方案3】:

    您已经创建了一个 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
    
    }
    

    【讨论】:

    • foreach 循环不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2014-01-07
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多