我想删除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);
....
....
Run Code Online (Sandbox Code Playgroud)
}
当我return;在DeleteCity方法中保持断点时.我可以看到cityToDelete的传入值已从城市中删除.但是当我进一步调用调用函数时,我可以看到ServiceLocator.Instance.Cities仍然持有该特定城市.为什么它不从该集合中删除该城市?
ServiceLocator由于您调用了您从列表中删除的城市ToList(),它强制将原始数据复制到新列表中.从副本中删除条目对原始列表没有影响,解释了您看到的行为.
此外,当您以递归方式调用该方法时,您还可以通过调用ToList()该Children属性来制作副本.因此,删除是从列表的副本完成的,而不是从原始副本完成的.原始系列保持不变.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |