_十_七_ 2020-05-28 17:22 采纳率: 50%
浏览 1015
已采纳

请问C#中队列的操作方法Queue.ElementAt(int index);会修改元素值吗,

程序提示我集合在枚举数实例化后进行了修改,我百度说是在遍历的过程中修改了元素值,抛异常的代码如下:

for (int i = 0; i < dataQueue.Count; i++)
{
chart1.Series[0].Points.AddY(dataQueue.ElementAt(i));
}
请问一下是因为哪个地方修改了元素值导致抛这个异常啊
完整代码如下:
public void AddData(int[] Data1, int[] Data2)//Data1包含从串口传入的数据
{
for (int i = 0; i < Data1.Length; i++)
{
dataQueue.Enqueue(Data1[i]);

}
}
另一段是:
public void Draw()
{
chart1.Series[0].Points.Clear();
if (dataQueue.Count > 500)
dataQueue.Dequeue();//Dequeue()返回队列第一个数据并移除,原先队列的第二个数据变为第一个
for (int i = 0; i < dataQueue.Count; i++)
{
chart1.Series[0].Points.AddY(dataQueue.ElementAt(i));
}
}
这两个操作队列的操作分别在不同的子函数里

  • 写回答

3条回答 默认 最新

  • Zelgius 2020-05-29 16:39
    关注

    按照你这个流程写了一下。

                int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
                Queue<int> queNums = new Queue<int>(nums);
                List<int> lstNums = new List<int>();
    
                for (int i = 0; i < queNums.Count; i++)
                {
                    lstNums.Add(queNums.ElementAt(i));
                }
    
                Console.WriteLine(string.Join("\t", lstNums));
    

    因为你用了ElementAt()这个方法我认为你这个用的应该是支持泛型的Queue<T>。可是这段代码我的编译器里并没有出错。
    你还有做别的操作吗?
    以及ElelmentAt()这个方法是IEnumerable<T>的扩展方法,只是返回特定位置的元素,应该是不会改变元素的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制