gpt4 book ai didi

c# - RemoveAt() 不工作 c#

转载 作者:行者123 更新时间:2023-11-30 18:57:10 27 4
gpt4 key购买 nike

即使在 RemoveAt() 方法之后,我的列表仍然保持不变,我什至没有收到错误:

foreach (var row in queryCandidates.ToList())
{
try
{
xString = queryCandidates.ToList().ElementAt(i).District;
int.TryParse(xString, out xNumber);

temp = xNumber.Equals(districtNumber);
System.Diagnostics.Debug.Write(temp+ " ");
System.Diagnostics.Debug.Write(i+" ");
if (temp == false)
{
System.Diagnostics.Debug.WriteLine(" i is:"+i);

//not working even when it should
queryCandidates.ToList().RemoveAt(i);

}
}

catch { }
i++;
if (last == i)
{
System.Diagnostics.Debug.WriteLine("before ending loop: ");
return View(queryCandidates.ToList());
}
}

System.Diagnostics.Debug.WriteLine("after ending the loop: ");
return View(queryCandidates.ToList());

最佳答案

ToList() 创建一个新实例。从此实例中,您将删除该元素。您没有从原始可枚举中删除元素。

你应该做这样的事情:

var candidates = queryCandidates.ToList();
var elementsToRemove = new List<int>();
foreach (var row in candidates)
{
// ...
xString = candidates[i].District;
// ...
if (temp == false)
{
// ...
elementsToRemove.Add(i);
}
}

for(int i = elementsToRemove.Count - 1; i >= 0; --i)
candidates.RemoveAt(elementsToRemove[i]);

return View(candidates);

请注意 elementsToRemove 的使用。您不能直接在循环中删除项目。这将引发异常。


此外,请注意 ToList 会复制所有数据。每次你调用它。很明显,这在循环中不是一个好主意。

关于c# - RemoveAt() 不工作 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12938124/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com