gpt4 book ai didi

c# - 从分层集合中删除项目

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:38 24 4
gpt4 key购买 nike

我正在尝试删除 city来自 ObservationCollection<City>.

我尝试过的:

private static void DeleteCity(List<City> cities, City cityToDelete)
{
City nodeToDelete = null;

foreach (var city in cities)
{
if (city.permanentId == cityToDelete.permanentId)
{
nodeToDelete = city;
break;
}
DeleteCity(city.Children.ToList(), cityToDelete);
}
if (nodeToDelete != null)
{
cities.Remove(nodeToDelete);
return;
}
}

public static void SomeFunction(...................)
{
......
......
......

DeleteCity(ServiceLocator.Instance.Cities.ToList(), cityToMove);

....
....

当我在 return; 上设置断点时在DeleteCity方法。我可以看到 cityToDelete 的传入值已从城市中删除。但是当我进一步调用调用函数时,我可以看到 ServiceLocator.Instance.Cities 仍然持有那个特定的城市。为什么它不从该集合中删除城市?

最佳答案

ServiceLocator 包含您从列表中删除的城市,因为您调用了 ToList(),这会强制将原始数据复制到新列表中。从副本中删除条目对原始列表没有影响,这解释了您看到的行为。

此外,当您递归调用该方法时,您还可以通过调用 Children 属性上的 ToList() 来制作副本。因此,删除是从列表的副本而不是原始列表中完成的。原始集合保持不变。

关于c# - 从分层集合中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26090436/

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