如何过滤递归对象?

Shi*_*rod 5 c#

在我当前的项目中,我无法控制的方法向我发送了这种类型的对象:

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提出的解决方案的问题,这是一张图片.左列是原始数据,没有过滤,右侧是过滤的数据.两种方法都提供相同的结果.红色是问题所在.

在此输入图像描述

das*_*ght 0

尝试这个方法:

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。