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
}
}
}