虽然这个问题可能看似陈词滥调,但直到现在,在我可以做的所有谷歌搜索之后,我都找不到合适的解释。 这是关于在迭代它时从列表中删除项目。它在向前循环迭代时起作用,而向后循环正常工作。以下是一些示例代码:
static void Main(string[] args)
{
var numberOfIterations = 0;
var listString = GetData();
var length = listString.Count;
for (var i = 0; i < listString.Count; i++)
{
numberOfIterations++;
if (ShouldRemove(listString[i]))
{
listString.Remove(listString[i]);
}
}
Console.WriteLine("Number of iterations run {0}", numberOfIterations);
numberOfIterations = 0;
listString = GetData();
for (var i = listString.Count - 1; i >= 0; i--)
{
numberOfIterations++;
if (ShouldRemove(listString[i]))
{
listString.Remove(listString[i]);
}
}
Console.WriteLine("Number of iterations run {0}", numberOfIterations);
Console.ReadLine();
}
private static bool ShouldRemove(string value)
{
return (value.StartsWith("A"));
}
private static List<string> GetData()
{
List<string> retList = new List<string>();
retList.Add("Apple");
retList.Add("Banana");
retList.Add("Aeroplane");
retList.Add("Cosmos");
retList.Add("Doggy");
retList.Add("Adam");
retList.Add("Crocodile");
return retList;
}
输出结果为:
Number of iterations run 4
Number of iterations run 7
我想知道为什么会这样。当我通过代码调试时,我发现for构造中的第二个条件(i&lt; listString.Count,在第一种情况下,i> = 0,在第二种情况下)在每次循环后重新评估。但这可能是C#语言特有的。这是第二种情况下循环运行每个元素的唯一原因,而在第一种情况下运行仅4次吗? 从面试答案的角度来看,我需要一个答案。谢谢你的阅读!