void DeleteItemCore(DemoItem item) { ItemCache.Remove(item.Id); if (item.IsFolder) { List <DemoItem> childItems = ItemCache.Values. Where(cacheItem => !cacheItem.IsRoot && cacheItem.ParentItem.Id == item.Id). ToList(); foreach (DemoItem childItem in childItems) { DeleteItemCore(childItem); } } }