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)
或者这是不可能的,我必须在我的业务逻辑中创建一个特殊的方法?
非常感谢.
你的意思是扩展方法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)