Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在类中创建队列的正确方法是什么?_C#_Queue_Enqueue - Fatal编程技术网

C# 在类中创建队列的正确方法是什么?

C# 在类中创建队列的正确方法是什么?,c#,queue,enqueue,C#,Queue,Enqueue,我正试着为我的客户排一队订单。 但最后一个附加值将取代所有值​​在队列中 我已经看到,当一个值进入队列时,它会覆盖队列中的所有其他值 class Program { static void Main(string[] args) { Console.WriteLine("Starting..."); byte[] dataInit = new byte[] { 0x00 }; Client clientTest = new Cli

我正试着为我的客户排一队订单。 但最后一个附加值将取代所有值​​在队列中

我已经看到,当一个值进入队列时,它会覆盖队列中的所有其他值

class Program
{

    static void Main(string[] args)
    {
        Console.WriteLine("Starting...");
        byte[] dataInit = new byte[] { 0x00 };
        Client clientTest = new Client();


        for (int i = 0; i <= 5; i++)
        {
            dataInit[0]++;
            Console.WriteLine("Adding Order -  i = {0}; Order: {1}.", i, BitConverter.ToString(dataInit));
            clientTest.AddOrder(dataInit);
            Console.WriteLine("Peeking Order - i = {0}; Order: {1}", i, BitConverter.ToString(clientTest.PeekOrder()));
        }

        for (int i = 0; i <= 5; i++)
        {
            Console.WriteLine("Removing order - i = {0}; Order: {1}.", i, BitConverter.ToString(clientTest.RemoveOrder()));
        }

        Console.WriteLine("Press Any Key...");
        Console.Read();

    }

    class ClientOrder
    {
        public byte[] Order;


        public ClientOrder(byte[] data)
        {
            Order = data;
        }


    }

    class Client
    {
        public Queue<ClientOrder> ClientOrders = new Queue<ClientOrder>();

        public void AddOrder(byte[] orderToAdd)
        {
            ClientOrders.Enqueue(new ClientOrder(orderToAdd));
        }

        public byte[] RemoveOrder()
        {

            ClientOrder toReturn = ClientOrders.Dequeue();
            return toReturn.Order;
        }

        public byte[] PeekOrder()
        {
            ClientOrder toReturn = ClientOrders.Peek();
            return toReturn.Order;
        }
    }
}
类程序
{
静态void Main(字符串[]参数)
{
Console.WriteLine(“开始…”);
字节[]数据初始化=新字节[]{0x00};
客户端clientTest=新客户端();

对于(inti=0;i您实际上共享了对
字节[]的相同引用
然后使用每个
排队
实际上替换队列中的所有元素,因为它们都引用相同的数组。在创建
ClientOrder
时,应该复制一份。简单的方法是使用
Linq
,但还有其他方法



或者像前面所说的那样,您实际上共享了对
字节[]的相同引用
然后使用每个
排队
实际上替换队列中的所有元素,因为它们都引用相同的数组。在创建
ClientOrder
时,应该复制一份。简单的方法是使用
Linq
,但还有其他方法



或者像前面所说的那样,或者用另一种方式来表述,您在
客户端中创建的每个
ClientOrder
。AddOrder
都使用相同的
字节[]
,所以当您每隔
ClientOrder
对象的
字节[]运行
dataInit[0]+
时订单
也会改变。或者换一种方式说,您在
客户端中创建的每个
ClientOrder
都会改变。AddOrder
使用相同的
byte[]
以便您每隔
dataInit[0]+
运行一次
ClientOrder
对象的
byte[/code>顺序也会改变。
public ClientOrder(byte[] data)
{
    Order = data.ToArray();
}