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

C#泛型RequestQueue类:Add方法参数赋值及请求添加问题

问题核心解决方案

你需要在RaiseRequest方法中传入当前对象实例(this),或者创建一个新的Department/Employee实例作为请求实体。原代码中deptTicket/empTicket字段未初始化,默认值为null,导致队列中无法存入有效内容。

修改后的关键代码

Department类

public class Department
{      
    public bool RaiseRequest()
    {
        // 传入当前Department实例作为有效请求
        return Helpdesk.DepQueue.Add(this);
    }
}

Employee类

public class Employee
{        
    public bool RaiseRequest()
    {
        // 传入当前Employee实例作为有效请求
        return Helpdesk.EmpQueue.Add(this);
    }
}

额外修复代码中的严重Bug

原RequestQueue<T>类存在两个致命问题,会导致队列逻辑混乱,需要同步修正:

  1. pointer是静态字段,会让所有队列实例共享同一个指针(比如部门队列和员工队列的指针互相干扰),需改为实例字段
  2. ProcessItem方法中创建的newArray是int[],与泛型数组类型不匹配,需改为T[]

修改后的RequestQueue<T>类:

public class RequestQueue<T>
{
    private T[] listOfRequest;
    // 改为实例字段,每个队列独立维护指针
    private int pointer;

    public RequestQueue(int size)
    {
        this.listOfRequest = new T[size]; 
        pointer = 0;
    }

    public bool Add(T tRef)
    {
        if(pointer < this.listOfRequest.Length)
        {
            this.listOfRequest[pointer] = tRef;
            pointer += 1;
            return true;
        }
        else { return false; }  
    }

    public bool ProcessItem()
    {
        if(pointer > 0)
        {
            // 创建同类型的泛型数组
            var newArray = new T[this.listOfRequest.Length];
            // 将后续元素前移,移除第一个请求
            Array.Copy(this.listOfRequest, 1, newArray, 0, pointer - 1);
            this.listOfRequest = newArray;
            pointer -= 1;
            return true;
        }
        else { return false; }
    }
}

逻辑说明

  • 传入this的原因:调用RaiseRequest的Department/Employee对象本身就是一个有效的请求实体,队列存储该对象引用后,后续处理请求时可以直接获取对应实体的信息。
  • 指针与数组修复:确保每个队列独立管理自己的请求数量和存储数组,避免不同类型队列之间的逻辑干扰。

内容的提问来源于stack exchange,提问作者Varun Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:03:30