遍历列表,执行一个方法:扩展可能吗?

Khh*_*Khh 4 .net c# linq lambda .net-3.5

我有这样的数据结构

public class Employee
{
    public string Name { get; set; }
    public IEnumerable<Employee> Employees { get; private set; }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在我需要遍历整个结构并对每个项目执行一个方法.

如何在IEnumerable上为这样的遍历函数创建扩展.

Wonderfull会是这样的

employeList.Traverse(e => Save(e), e.Employees.Count > 0);
Run Code Online (Sandbox Code Playgroud)

或者这是不可能的,我必须在我的业务逻辑中创建一个特殊的方法?

非常感谢.

Jon*_*eet 6

你的意思是扩展方法IEnumerable<Employee>吗?这当然是可行的:

public static void Traverse(this IEnumerable<Employee> employees,
                            Action<Employee> action,
                            Func<Employee, bool> predicate)
{
    foreach (Employee employee in employees)
    {
        action(employee);
        // Recurse down to each employee's employees, etc.
        employee.Employees.Traverse(action, predicate);
    }
}
Run Code Online (Sandbox Code Playgroud)

这必须是静态的,非泛型的,非嵌套的类.

我不确定谓词位是什么,请注意......

编辑:这是我认为你正在寻找的更通用的形式:

public static void Traverse<T>(this IEnumerable<T> items,
                               Action<T> action,
                               Func<T, IEnumerable<T>> childrenProvider)
{
    foreach (T item in items)
    {
        action(item);
        Traverse<T>(childrenProvider(item), action, childrenProvider);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你用它来调用它:

employees.Traverse(e => Save(e), e => e.Employees);
Run Code Online (Sandbox Code Playgroud)