如何仅将指定的数组成员发送到ToString覆盖?

问题描述 投票:0回答:2

我当前的C#家庭作业需要使用预定义的7个员工记录数组,每个记录包含一组属性。这些记录必须使用foreach循环从数组中提取所有员工记录,然后使用ToString的公共覆盖来显示具有特定列式格式的记录。我已经能够毫无问题地实现这个阶段。

然后,下一组要求要求我们仅显示服务年限少于一年或1到5年的员工记录,这就是我遇到困难的地方。

我们需要使用此类来表示当前日期(从作业中复制和粘贴):

public static class GlobalVars
{
    public static DateTime reportDate = DateTime.Parse("02/28/2017");
}

我们还需要创建一个名为YearsOfService的原始方法来计算员工的服务年限,将员工的雇佣年份年份与GlobalVars课程中当前日期的年份进行比较,我在这里做了:

public int YearsOfService()
{
    DateTime current = GlobalVars.reportDate;
    int yearsOfService = current.Year - hireDate.Year;
    return yearsOfService;
}

我们需要使用此语法在屏幕上打印记录(从分配中复制和粘贴):

Employee emp = new Employee();
Employee[] employees = Employee.GetEmployeeData();

Console.WriteLine(Employee.EmployeeReportTitle("Employee Report Data Dump"));
Console.WriteLine(Employee.ColumnHeader());

foreach (Employee employee in employees)
{
    Console.WriteLine(employee.ToString());
}

这是我格式化的列格式的覆盖字符串输出:

public override string ToString()
{
    return String.Format("{0,-10:D5}   {1, -20}{2, -16}${3, -11}{4:MM/dd/yyyy} {5, 16:D2}",
    empNumber, empName, empStatus, hourlyWage, hireDate, YearsOfService());
}

这可以很好地打印数组中的每个记录,但是如何在foreach级别插入需求?我需要实现一个过滤器,因此通过ToString打印的唯一记录是yearsOfService高于特定值或两个值之间的记录。

我已经尝试过if / else循环和切换案例,但是我无法以正确记录被排除/包含的方式获得语法结构。

c# foreach enums override tostring
2个回答
0
投票

你可以用这两种方式中的一种来做...

var minYoS = 3;
var maxYoS = 5;

foreach (Employee employee in employees.Where(x => x.YearsOfService() >= minYoS && x.YearsOfService() <= maxYoS))
{
    Console.WriteLine(employee.ToString());
}

要么

var minYoS = 3;
var maxYoS = 5;

foreach (Employee employee in employees)
{
    if(minYoS <= employee.YearsOfService() && maxYoS >= employee.YearsOfService()){
        Console.WriteLine(employee.ToString());
    }
}

第一个示例使用LINQ投影仅迭代满足指定要求的员工。第二个遍历所有员工,然后在foreach循环内部代码评估是否应将员工记录打印到控制台


0
投票

你的过滤器可能是Where方法,是LINQ这个伟大系列中最有用的方法之一。

var employeesFilter = employees.Where(employee => employee.YearsOfService > 5);
foreach (Employee employee in employeesFilter)
{
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.