C# 删除以前的列表<&燃气轮机;枚举数C中的项# ///main while(true) { List.Enumerator instEnum=messagesList.GetEnumerator(); InstantaiteObject(instEnum); } ///统计员 while(枚举数.MoveNext()) { ..... }
我需要删除一个项目,我刚刚处理了枚举器中循环的每个步骤。 如果无法在枚举器中执行,我需要从main中的列表中删除所有我处理过的项目。C# 删除以前的列表<&燃气轮机;枚举数C中的项# ///main while(true) { List.Enumerator instEnum=messagesList.GetEnumerator(); InstantaiteObject(instEnum); } ///统计员 while(枚举数.MoveNext()) { ..... },c#,list,erase,enumerator,C#,List,Erase,Enumerator,我需要删除一个项目,我刚刚处理了枚举器中循环的每个步骤。 如果无法在枚举器中执行,我需要从main中的列表中删除所有我处理过的项目。 是否有一种内置的优雅方式可以做到这一点?您没有添加必要的细节。你可以使用很多可能的方法。例如,如果可以复制列表,请处理第一个元素,然后删除第一个元素: ///main while(true) { List<string>.Enumerator instEnum = messagesList.GetEnumerator(); Instan
是否有一种内置的优雅方式可以做到这一点?您没有添加必要的细节。你可以使用很多可能的方法。例如,如果可以复制列表,请处理第一个元素,然后删除第一个元素:
///main
while(true)
{
List<string>.Enumerator instEnum = messagesList.GetEnumerator();
InstantaiteObject(instEnum);
}
///enumerator
while (enumerator.MoveNext())
{
.....
}
var instEnum=新列表(messagesList);
而(instEnum.Count>0)
{
//过程项
// ...
//然后移除它
仪器计数移除(0);
}
这种方法有很多变体(使用索引可以跳过项、删除项等),因此在不了解更多情况的情况下,我们无法提供更多帮助。在通过接口迭代时更改
IEnumerable
的源会使枚举器无效。因此,这是不可能的。
也就是说,由于您使用的是列表
您可以迭代列表的副本,并从原始列表中删除需要删除的项(通常效率低下)。这不会使您的枚举数无效
改用索引器
示例1:
var instEnum = new List<string>(messagesList);
while (instEnum.Count > 0)
{
// Process item
// ...
// then remove it
instEnum.RemoveAt(0);
}
示例2:
foreach(var myItem in messageList.ToList())
{
//Do stuff...
if(whateverContition == true)
{
messageList.Remove(myItem);
}
}
for(int i=0;i
如果您只能访问IEnumerable
,则可以执行#1或Ryan的解决方案。删除元素的条件是什么?
for(int i = 0; i < messageList.Count; i++)
{
string myItem = messageList[i];
//Do stuff...
if(whateverContition == true)
{
messageList.RemoveAt(i);
--i;
}
}