我有一个要发送给该方法的字符串列表。该方法获取列表,对其进行迭代并删除所有空字符串。在我发送的列表中,共有 7 个空白字符串,但该方法似乎只删除了其中的 4 个。
这是方法:
public List<string> RemoveWhiteSpace(List<string> rawData)
{
for (int i = 0; i < rawData.Count; i++)
{
if (rawData[i].Length == 0)
{
rawData.RemoveAt(i);
}
}
return rawData;
}
Run Code Online (Sandbox Code Playgroud)
这是直接从控制台复制的列表本身:
@0
D=M
@1
D=D-M
@10
D;JGT
@1
D=M
@12
0;JMP
@0
D=M
@2
M=D
@14
0;JMP
Run Code Online (Sandbox Code Playgroud)
这是该方法的输出字符串。它无法消除 3 个空字符串。我测试并检查了未被删除的字符串的索引,它们是索引:4,5 和 6。我还检查了这些字符串的长度,它们实际上是 0。我不明白问题是什么.
@0
D=M
@1
D=D-M
@10
D;JGT
@1
D=M
@12
0;JMP
@0
D=M
@2
M=D
@14
0;JMP
Run Code Online (Sandbox Code Playgroud) 听着,我不想知道基本的foreach.我在谈论控制这个错误的那个:
"The enumerator is not valid because the collection changed."
当我这样做时会发生这种情况:
foreach(Image image in images)
{
if(...)
{
images.remove(image)
}
}
Run Code Online (Sandbox Code Playgroud)
我相信有一个特殊的迭代器可以很好地处理这个问题,就像Java一样.那么,我怎么能在C#中做到这一点呢?谢谢!
我有一个List<string>包含一些非字母字符的元素.例如,我可能#232353;根本不包含任何字母,或者我可能有,SomeText,SomeOtherText并且该元素包含逗号,也不是字母.如何使用linq删除这些元素?像这样的东西:
MyList = MyList.Where(...)
Run Code Online (Sandbox Code Playgroud)
谢谢.
for (int j = 0; j < list.Count; ++j )
{
if (list[j].current_status == false)
{
list.RemoveAt(j);
}
}
Run Code Online (Sandbox Code Playgroud)
我想删除列表中有current_status == false的所有项目.但是,当执行语句:list.RemoveAt(j)时,list.Count将减去1.最后,原始循环不能从list [0]循环到list [list.Count].我该如何处理这种情况?
谢谢
可以想象这将是一个非常简单的任务,但是当我运行此代码时,我得到一个System.InvalidOperationException:
Dictionary<string, bool> TableExists = new Dictionary<string, bool>();
//... fill the dictionary
foreach(string value in TableExists.Keys){/*Do something*/}
Run Code Online (Sandbox Code Playgroud)
它应该遍历字典的键TableExists,但我foreach在行处得到无效操作异常.我错误地使用任何字典操作吗?如果是这样,通过C#字典的键的正确方法是什么?
编辑:
是的,我试图更改与字典键对应的某些值,但是收到Collection was modified错误.