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();
}