2014-09-28 77 views
1

刪除一個項目,我想從一個ObservationCollection<City>.從分層集合

刪除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仍然保持着這個特定的城市。爲什麼它不會從該集合中刪除該城市?

+0

你似乎正在通過你想要移動的城市.. – 2014-09-28 22:54:01

+0

你的DeleteCity(...,...)方法做什麼? – 2014-09-28 22:54:35

+0

@kirsteng我相信我正在通過正確的城市。 – Vishal 2014-09-28 22:55:51

回答

6

ServiceLocator有您從列表中刪除的城市,因爲您調用了ToList(),這會強制將原始數據複製到新列表中。從副本刪除條目對原始列表沒有影響,說明您看到的行爲。

此外,當您遞歸調用方法時,還可以通過調用Children屬性上的ToList()來製作副本。因此,從列表的副本中刪除,而不是從原始的刪除。原始收藏保持不變。

+1

謝謝。現在它像一個魅力。根據stackOverFlow規則,我將在7分鐘後接受答案。 – Vishal 2014-09-28 22:59:18