我有一种方法可以将列表中某些学生对象的数据添加到数据表中。该方法检查studentList中满足特定条件的学生,然后将它们添加到数据表中。
我想在参数中指定条件,但是当我尝试传入 s.status 作为我的第二个字符串参数时,我(理解上)会出错,因为 s 在foreach循环开始之前不会发挥作用。有没有办法让这项工作?
public void AddDataTableRows(DataTable datatable, string field, string condition)
{
foreach (student s in studentList)
{
if (field == condition)
{
datatable.Rows.Add(s.name,
s.totalDays,
s.improveOverall,
s.totalClassDays,
s.instructor,
s.grade);
}
}
}
我想要的电话
AddDataTableRows(DataTable1, s.status, "active");
答案 0 :(得分:6)
可能是这样的
public void AddDataTableRows(DataTable datatable, Func<Student,bool> cond)
{
foreach (student s in studentList)
{
if (cond(s))
{
datatable.Rows.Add(s.name,
s.totalDays,
s.improveOverall,
s.totalClassDays,
s.instructor,
s.grade);
}
}
}
您现在可以将其称为AddDataTableRows(...., s => s.Status == "active");
答案 1 :(得分:3)
您可以将参数设为Predicate<Student>
。这使得函数:
public void AddDataTableRows(DataTable datatable, Predicate<Student> condition)
{
foreach (student s in studentList.Where(condition))
{
datatable.Rows.Add(s.name,
s.totalDays,
s.improveOverall,
s.totalClassDays,
s.instructor,
s.grade);
}
}
然后你会这样打电话:
AddDataTableRows(table, (s) => s.status == "active");
答案 2 :(得分:2)
你需要的是:
public void AddDataTableRows(DataTable datatable, Func<student, bool> predicate)
{
foreach (student s in studentList)
{
if (predicate(s))
{
datatable.Rows.Add(s.name,
s.totalDays,
s.improveOverall,
s.totalClassDays,
s.instructor,
s.grade);
}
}
}
你会这样称呼:
AddDataTableRows(datatable, s => s.Status == "enrolled");