在我当前的项目中,我无法控制的方法向我发送了这种类型的对象:
public class SampleClass
{
public SampleClass();
public int ID { get; set; }
public List<SampleClass> Items { get; set; }
public string Name { get; set; }
public SampleType Type { get; set; }
}
public enum SampleType
{
type1,
type2,
type3
}
Run Code Online (Sandbox Code Playgroud)
我在a中显示这些数据TreeView,但我想只显示SampleClass以其Type属性设置为的对象结束的路径type3,无论此叶的深度如何.
我完全不知道如何做到这一点,有人可以帮助我吗?
提前致谢 !
为了解释我遇到Shahrooz Jefri和dasblinkenlight提出的解决方案的问题,这是一张图片.左列是原始数据,没有过滤,右侧是过滤的数据.两种方法都提供相同的结果.红色是问题所在.

尝试这个方法:
static bool ShouldKeep(SampleClass item) {
return (item.Type == SampleType.type3 && item.Items.Count == 0)
|| item.Items.Any(ShouldKeep);
}
static SampleClass Filter(SampleClass item) {
if (!ShouldKeep(item)) return null;
return new SampleClass {
Id = item.Id
, Name = item.Name
, Type = item.Type
, Items = item.Items.Where(ShouldKeep).Select(x=>Filter(x)).ToList()
};
}
Run Code Online (Sandbox Code Playgroud)
上面的代码假设Itemsleaves 是空列表,而不是nulls。