Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较两个递归对象并删除C中的项#_C#_Recursion - Fatal编程技术网

C# 比较两个递归对象并删除C中的项#

C# 比较两个递归对象并删除C中的项#,c#,recursion,C#,Recursion,我有两个带有递归项的类。课程内容如下: public class TreeView { public TreeView() { Children = new List<TreeView>(); } public int Id { get; set; } public int ParentId { get; set; } public string Name

我有两个带有递归项的类。课程内容如下:

public class TreeView
    {
        public TreeView()
        {
            Children = new List<TreeView>();
        }

        public int Id { get; set; }
        public int ParentId { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }

        // children
        public List<TreeView> Children { get; set; }
    }

    public class TreeViewModel
    {
        public TreeViewModel()
        {
            Children = new List<TreeViewModel>();
        }

        public TreeView TreeView { get; set; }

        // children
        public List<TreeViewModel> Children { get; set; }
    }
现在我想比较treeView对象和模型对象以及所有子对象,并删除哪些对象存在于treeView中,但不存在于模型中。我已经为此准备了以下方法

public static void DeleteItem()
        {
            var treeView = new TreeView();
            var model = new TreeViewModel();

            // level 2
            foreach (var child in treeView.Children)
            {
                var modelChild = model.Children.Where(x => x.TreeView.Id == child.Id).FirstOrDefault();

                if (modelChild != null)
                {
                    // level 3
                    foreach (var grandChild in child.Children)
                    {
                        var modelGrandChild = modelChild.Children.Where(x => x.TreeView.Id == grandChild.Id).FirstOrDefault();

                        if (modelGrandChild == null)
                        {
                            // delete grandChild
                        }
                    }
                }
                else
                {
                    foreach (var item in child.Children)
                    {
                        // delete item
                    }

                    // finally delete child object
                }
            }
        }

有没有更好的方法来比较两个对象并分离要删除的子对象。

我们需要通过树视图递归,检查每个级别的每个子对象是否存在等效模型

我们通过传递每个树视图子节点及其匹配模型来递归。如果没有父模型,那么我们根本不检查,只取
null
。然后,如果我们没有等效的子级(或者甚至没有父级),我们将删除

公共静态void DeleteMissingChildren(TreeView TreeView,TreeView模型)
{
foreach(treeView.childs中的var child)
{
TreeViewModelModelChild=
模型==null
无效的
:model.Children.FirstOrDefault(x=>x.TreeView.Id==child.Id);
DeleteMissingChildren(child,modelChild);
if(modelChild==null)
删除(子项);//无论什么
}
}
public static void DeleteItem()
        {
            var treeView = new TreeView();
            var model = new TreeViewModel();

            // level 2
            foreach (var child in treeView.Children)
            {
                var modelChild = model.Children.Where(x => x.TreeView.Id == child.Id).FirstOrDefault();

                if (modelChild != null)
                {
                    // level 3
                    foreach (var grandChild in child.Children)
                    {
                        var modelGrandChild = modelChild.Children.Where(x => x.TreeView.Id == grandChild.Id).FirstOrDefault();

                        if (modelGrandChild == null)
                        {
                            // delete grandChild
                        }
                    }
                }
                else
                {
                    foreach (var item in child.Children)
                    {
                        // delete item
                    }

                    // finally delete child object
                }
            }
        }