【发布时间】:2022-08-24 20:46:37
【问题描述】:
在我的Program.cs
我声明一个代表
public delegate bool FilterDelegate(Employee emp);
我创建了一个员工列表
List<Employee> employees = new List<Employee>
{
new Employee(){ID= 1907, Name= \"Mary Sue\", Experience = 5},
new Employee(){ID= 1353, Name= \"Peggy Sue\", Experience = 1},
new Employee(){ID= 1645, Name= \"Gary Stu\", Experience = 2},
new Employee(){ID= 141, Name= \"John Doe\", Experience = 3},
new Employee(){ID= 1033, Name= \"Jimmy Smith\", Experience = 4}
};
调用显示函数并传递委托
Employee.FilterAndDisplay(employees, cutOffFilter);
static bool cutOffFilter(Employee emp)
{
return emp.Experience < 4;
}
在Employee.cs
public static void FilterAndDisplay(List <Employee> employees, FilterDelegate filter)
{
var table = new ConsoleTable(\"ID\", \"Name\", \"Experience\");
foreach (var emp in employees)
{
if(filter(emp))
{
table.AddRow(emp.ID, emp.Name, emp.Experience);
}
}
table.Write();
Console.WriteLine();
}
现在这工作正常。但是,如果我想让经验年数动态化怎么办?如何将变量传递给 static bool cutOffFilter ?然后在if(filter(emp)) 中使用它?
-
你确定那工作?委托需要两个参数,但方法
cutOffFilter有一个。 -
也许只是我的看法,但我发现使用委托类型有点烦人。
Funcs 和Actions 使用起来更容易,也更灵活。 -
@vernou 第二个是一个错误
-
顺便说一句,
Employee应该只是具有员工属性的类。它根本不应该知道如何过滤或显示员工。所以把那个方法移到别处! -
@Jamiec 有时在数据库模型中他们没有过滤数据的方法吗?