如何在C#中将两个列表信息整合到新列表并实现员工的项目分配与移除
实现员工与项目分配/移除的逻辑及代码示例
核心实现逻辑
- 补全基础类属性:给
Project添加名称属性、给Employee添加姓名属性,用于精准匹配目标对象;同时在Project类中维护一个员工集合,存储该项目关联的所有员工,实现"一个项目对应多名员工"的关联关系。 - 分配员工逻辑:先从项目列表中找到目标项目,从员工列表中找到目标员工,确认两者存在且员工未关联该项目后,将员工加入项目的员工集合。
- 移除员工逻辑:找到目标项目和员工,确认员工已关联该项目后,从项目的员工集合中移除该员工。
- 封装操作方法:在管理类中封装分配、移除方法,统一处理合法性检查,避免重复代码。
完整代码示例
修正后的基础实体类
public class Project { public int Id { get; set; } public string Name { get; set; } // 存储该项目关联的所有员工 public List<Employee> AssignedEmployees { get; set; } public Project(int id, string name) { Id = id; Name = name; // 初始化员工集合 AssignedEmployees = new List<Employee>(); } public Project() { AssignedEmployees = new List<Employee>(); } } public class Employee { public int EmployeeID { get; set; } public string FirstName { get; set; } public Employee(int empId, string firstName) { EmployeeID = empId; FirstName = firstName; } public Employee() { } }
扩展后的管理类(含分配/移除方法)
public class ProjectManagement { public List<Project> Projects = new List<Project>(); // 添加项目 public void AddProject(Project project) { Projects.Add(project); } // 分配员工到项目 public bool AssignEmployeeToProject(string projectName, string employeeFirstName, EmpManagement empManager) { // 查找目标项目(忽略大小写匹配) var targetProject = Projects.FirstOrDefault(p => p.Name.Equals(projectName, StringComparison.OrdinalIgnoreCase)); // 查找目标员工 var targetEmp = empManager.empList.FirstOrDefault(e => e.FirstName.Equals(employeeFirstName, StringComparison.OrdinalIgnoreCase)); if (targetProject == null) { Console.WriteLine("指定项目不存在"); return false; } if (targetEmp == null) { Console.WriteLine("指定员工不存在"); return false; } if (targetProject.AssignedEmployees.Contains(targetEmp)) { Console.WriteLine("该员工已关联此项目"); return false; } targetProject.AssignedEmployees.Add(targetEmp); Console.WriteLine("员工分配成功"); return true; } // 从项目移除员工 public bool RemoveEmployeeFromProject(string projectName, string employeeFirstName, EmpManagement empManager) { var targetProject = Projects.FirstOrDefault(p => p.Name.Equals(projectName, StringComparison.OrdinalIgnoreCase)); var targetEmp = empManager.empList.FirstOrDefault(e => e.FirstName.Equals(employeeFirstName, StringComparison.OrdinalIgnoreCase)); if (targetProject == null || targetEmp == null) { Console.WriteLine("项目或员工不存在"); return false; } if (!targetProject.AssignedEmployees.Contains(targetEmp)) { Console.WriteLine("该员工未关联此项目"); return false; } targetProject.AssignedEmployees.Remove(targetEmp); Console.WriteLine("员工移除成功"); return true; } } public class EmpManagement { public List<Employee> empList = new List<Employee>(); // 添加员工 public void AddEmp(Employee emp) { empList.Add(emp); } }
使用示例
// 初始化管理实例 var projectManager = new ProjectManagement(); var empManager = new EmpManagement(); // 添加测试数据 projectManager.AddProject(new Project(1, "电商系统重构")); empManager.AddEmp(new Employee(101, "张三")); empManager.AddEmp(new Employee(102, "李四")); // 执行分配操作 projectManager.AssignEmployeeToProject("电商系统重构", "张三", empManager); projectManager.AssignEmployeeToProject("电商系统重构", "李四", empManager); // 尝试重复分配 projectManager.AssignEmployeeToProject("电商系统重构", "张三", empManager); // 执行移除操作 projectManager.RemoveEmployeeFromProject("电商系统重构", "李四", empManager); // 查看项目关联的员工 var targetProject = projectManager.Projects.First(p => p.Name == "电商系统重构"); Console.WriteLine($"\n项目 {targetProject.Name} 当前关联员工:"); foreach (var emp in targetProject.AssignedEmployees) { Console.WriteLine($"- {emp.FirstName} (ID: {emp.EmployeeID})"); }
额外说明
- 如果需要支持员工关联多个项目,只需在
Employee类中添加List<Project> AssignedProjects集合,并在分配/移除时同时维护Project和Employee两边的集合即可。 - 实际开发中建议用**ID(如Project.Id、Employee.EmployeeID)**作为匹配依据,比名称更可靠,避免重名导致的匹配错误。
内容的提问来源于stack exchange,提问作者Sai Kiran
相关产品推荐
相关产品推荐

