亦身仙气 2022-11-15 17:14 采纳率: 71.9%
浏览 9
已结题

foreach 在操作集合中报错

代码如下:
unity报错内容为:InvalidOperationException: Collection was modified; enumeration operation may not execute.
麻烦各位了帮忙改一下,貌似问题在listener.GestureCompleted这个上面,好像是使用了foreach了之后,不能修改或者删除数据造成的,这一份源码是kinect里面的KinectManager.cs这份代码里面的报错。
因为不熟悉foreach把一个类,转换到继承的类,并且还使用的是list,所以我就懵了

// Check for complete gestures
                List<KinectGestures.GestureData> gesturesData = playerGesturesData[userId];
                int userIndex = GetUserIndexById(userId);
                
                foreach(KinectGestures.GestureData gestureData in gesturesData)
                {

                    if (gestureData.complete)
                    {
//                        if(gestureData.gesture == KinectGestures.Gestures.Click)
//                        {
//                            if(controlMouseCursor)
//                            {
//                                MouseControl.MouseClick();
//                            }
//                        }
                
                        foreach(KinectGestures.GestureListenerInterface listener in gestureListeners)
                        {
                            if(listener != null && listener.GestureCompleted(userId, userIndex, gestureData.gesture, (KinectInterop.JointType)gestureData.joint, gestureData.screenPos))
                            {
                                ResetPlayerGestures(userId);
                            }
                        }
                    }
                    else if(gestureData.cancelled)
                    {
                        foreach(KinectGestures.GestureListenerInterface listener in gestureListeners)
                        {
                            if(listener != null && listener.GestureCancelled(userId, userIndex, gestureData.gesture, (KinectInterop.JointType)gestureData.joint))
                            {
                                ResetGesture(userId, gestureData.gesture);
                            }
                        }
                    }
                    else if(gestureData.progress >= 0.1f)
                    {
//                        if((gestureData.gesture == KinectGestures.Gestures.RightHandCursor || 
//                            gestureData.gesture == KinectGestures.Gestures.LeftHandCursor) && 
//                           gestureData.progress >= 0.5f)
//                        {
//                            if(handCursor != null)
//                            {
//                                handCursor.transform.position = Vector3.Lerp(handCursor.transform.position, gestureData.screenPos, 3 * Time.deltaTime);
//                            }
//                            
//                            if(controlMouseCursor)
//                            {
//                                MouseControl.MouseMove(gestureData.screenPos);
//                            }
//                        }
                        
                        foreach(KinectGestures.GestureListenerInterface listener in gestureListeners)
                        {
                            if(listener != null)
                            {
                                listener.GestureInProgress(userId, userIndex, gestureData.gesture, gestureData.progress, 
                                                           (KinectInterop.JointType)gestureData.joint, gestureData.screenPos);
                            }
                        }
                    }
                }

  • 写回答

2条回答 默认 最新

  • 周周的Unity小屋 2022-11-15 17:16
    关注

    用for循环

    评论

报告相同问题?

问题事件

  • 请采纳用户回复 11月16日
  • 已结题 (查看结题原因) 11月15日
  • 创建了问题 11月15日

悬赏问题

  • ¥15 程序实在不会写,要秃了
  • ¥15 pycharm导入不了自己的包
  • ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
  • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
  • ¥15 关于R语言单因素与多因素线性回归的平均值
  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度