C# 如何从列表中查找(并删除)嵌套对象
希望有人能帮忙。我有一个目标:C# 如何从列表中查找(并删除)嵌套对象,c#,wpf,linq,C#,Wpf,Linq,希望有人能帮忙。我有一个目标: public class folder { public string folderName { get; set; } public string folderPath { get; set; } public List<folder> subFolders { get; set; } } 似乎无法找到嵌套对象以将其删除 我尝试了几种使用Linq的方法,但没有乐趣,也许他们的方法更好 希望有人能帮忙 谢谢 Nath列表不知道
public class folder
{
public string folderName { get; set; }
public string folderPath { get; set; }
public List<folder> subFolders { get; set; }
}
似乎无法找到嵌套对象以将其删除
我尝试了几种使用Linq的方法,但没有乐趣,也许他们的方法更好
希望有人能帮忙
谢谢
Nath列表不知道它是递归的。它不知道,也不可能知道它的项具有什么属性,或者它们的含义。
mycustomlist
中的文件夹是mycustomlist
中的文件夹,还是属于mycustomlist
中的项目的列表(或子项的子项等)
如果希望一个函数从创建的树结构中的任何位置删除给定项,而不管它位于哪个特定根或子列表中,则必须编写自己的递归方法来执行此操作
似乎无法找到嵌套对象以将其删除
Remove
不是递归的。它仅直接删除列表中的项目
如果文件夹位于子列表中,则需要递归搜索该文件夹,然后将其从实际所在的列表中删除
private bool RecursiveRemove(folder thisList, folder thefolder)
{
if (thisList.Contains(theFolder))
{
thisList.Remove(theFolder);
return true;
}
else
{
foreach (var folder in thisList.subFolders)
{
if (RecursiveRemove(folder, theFolder))
{
return true;
}
}
}
return false; // not found
}
这就是我为这个得到的
public void RemoveFolder(Folder folder, List<Folder> folderList)
{
if (folderList != null)
{
if (folderList.Contains(folder))
{
folderList.Remove(folder);
}
else
{
foreach (var subFolder in folderList.Select(x => x.subFolders))
{
RemoveFolder(folder, subFolder);
}
}
}
}
public void RemoveFolder(文件夹文件夹,列表文件夹列表)
{
if(folderList!=null)
{
if(folderList.Contains(文件夹))
{
文件夹列表。删除(文件夹);
}
其他的
{
foreach(文件夹列表中的var子文件夹。选择(x=>x.subFolders))
{
移除文件夹(文件夹,子文件夹);
}
}
}
}
但我认为你需要编写自己的权益比较程序
看这里
列表不知道它是递归的。它不知道,也不可能知道它的项具有什么属性,或者它们的含义。
mycustomlist
中的文件夹是mycustomlist
中的文件夹,还是属于mycustomlist
中的项目的列表(或子项的子项等)?如果要从已创建的树结构中的任何位置删除项,则必须编写自己的递归方法。为什么需要查找一些嵌套对象?您的列表应包含顶级文件夹。找到包含列表的对象,该列表包含要删除的文件夹
对象,然后从该点删除。。。不是从最高层…@EdPlunkett谢谢,是的,孩子的后代存在于一个孩子的孩子身上。我希望它足够聪明,但我想我最好写一个递归方法!感谢您的帮助:)将其父对象声明为属性,以便您可以将其从父对象中删除thefolder.Parent.remove(thefolder)
第一次工作,节省了我很多时间谢谢!
private bool RecursiveRemove(folder thisList, folder thefolder)
{
if (thisList.Contains(theFolder))
{
thisList.Remove(theFolder);
return true;
}
else
{
foreach (var folder in thisList.subFolders)
{
if (RecursiveRemove(folder, theFolder))
{
return true;
}
}
}
return false; // not found
}
public void RemoveFolder(Folder folder, List<Folder> folderList)
{
if (folderList != null)
{
if (folderList.Contains(folder))
{
folderList.Remove(folder);
}
else
{
foreach (var subFolder in folderList.Select(x => x.subFolders))
{
RemoveFolder(folder, subFolder);
}
}
}
}