场景:我有一个 List
第一次写成
- foreach(var item in records)
- {
- if (item.logMessage.Contains("上传通行记录"))
- records.Remove(item);
- }
直接报错,因为foreach 是个迭代器 直接移除它的对象会报错
第二次换成 for
- for (int i = 0; i < records.Count; i++)
- {
- ISSLogMessage item = records[i];
- item.moduleName = $"{_gateSentryManager.GateSentryInfo.Name}";
- if (item.logMessage.Contains("上传通行记录"))
- records.Remove(item);
- }
不报错了,可以跑了,但是有BUG ???
如果 需要移除的数据是相邻的,那么后面的元素将不会移除
出现问题:未能删除相邻元素后一个
原因:ArrayList的底层结构是数组类型,数组删除某个元素时,后面所有元素的索引都会往前移,而此时for循环的指针是却是往后移动 ..........................
第三次
- List<int> rids = new List<int>();
- for (int i = 0; i < records.Count; i++)
- {
- ISSLogMessage item = records[i];
- item.moduleName = $"{_gateSentryManager.GateSentryInfo.Name}";
- if (item.logMessage.Contains("上传通行记录"))
- rids.Add(i);
- }
- foreach (int i in rids)
- {
- records.RemoveAt(i);
- }
还是有问题 ....................
本着觉得写得有点复杂得想法查了下网络 可以写成
- IEnumerator rator = records.GetEnumerator();//1.迭代器对象
- List
m_storageList = new List(); //存储列表 - while (rator.MoveNext()) //2.循环条件
- {
- ISSLogMessage item = (ISSLogMessage)rator.Current;//3.当前值
- item.moduleName = $"{_gateSentryManager.GateSentryInfo.Name}";
- if (!item.logMessage.Contains("上传通行记录"))
- m_storageList.Add(item);
- }
- records = m_storageList;
还是新添加靠谱啊