递归函数不会循环遍历所有子项

时间:2014-10-03 06:18:59

标签: c# recursion

这是我的递归函数,用于将新添加的城市添加到层次集合中。

private City getNewlyAddedCity(ObservableCollection<City> cities)
{

    foreach (var city in cities)
    {
        if (city.IsLastAdded)
        {
            return city;
        }
        getNewlyAddedCity(city.Children);
    }

    return null;

}

我将此功能称为:

City newlyAddedCity = getNewlyAddedCity(ServiceLocator.Instance.Cities);

每次newlyAddedCity为空。

如果我放置一个断点并检查,那么有一个城市有IsLastAdded = true

我还使用Breakpoint检查过这个函数没有循环遍历集合中的所有城市。

3 个答案:

答案 0 :(得分:2)

您正在放弃getNewlyAddedCity(city.Children);的返回值。因此,在循环之后,函数将返回null

你可以这样做:

return getNewlyAddedCity(city.Children);

此外,您似乎想要获得最后添加的城市&#34;。既然您已使用ObservableCollection<T>,为什么不考虑使用CollectionChanged event

答案 1 :(得分:2)

private City getNewlyAddedCity(ObservableCollection<City> cities) {
    City result = null;
    foreach(var city in cities) {
        if(city.IsLastAdded) { return city; }
        result = getNewlyAddedCity(city.Children);
        if(result != null) { break; }
    }
    return result;
}

答案 2 :(得分:1)

你不应该

return getNewlyAddedCity(city.Children);

而不只是调用它?