You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中将两个列表信息整合到新列表并实现员工的项目分配与移除

实现员工与项目分配/移除的逻辑及代码示例

核心实现逻辑

  1. 补全基础类属性:给Project添加名称属性、给Employee添加姓名属性,用于精准匹配目标对象;同时在Project类中维护一个员工集合,存储该项目关联的所有员工,实现"一个项目对应多名员工"的关联关系。
  2. 分配员工逻辑:先从项目列表中找到目标项目,从员工列表中找到目标员工,确认两者存在且员工未关联该项目后,将员工加入项目的员工集合。
  3. 移除员工逻辑:找到目标项目和员工,确认员工已关联该项目后,从项目的员工集合中移除该员工。
  4. 封装操作方法:在管理类中封装分配、移除方法,统一处理合法性检查,避免重复代码。

完整代码示例

修正后的基础实体类

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:55:09