从分层Collection中删除项目

时间:2014-09-28 22:50:54

标签: c#

我正在尝试从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仍然持有该特定城市。为什么它不从该集合中删除城市?

1 个答案:

答案 0 :(得分:6)

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

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