如何在队列中放置和访问类类型的对象

本文关键字:访问 类型 对象 队列 | 更新日期: 2023-09-27 18:34:03

所以基本上我有一个工作类

public class Job
{
   private string id;               
   private int numBytes;           
   private int requiredTime; 
}

在我的主要内容中,我接收值并创建工作

var aJob = new Job();
Queue jobQueue = new Queue();

我希望能够再次将作业信息作为作业从队列中取出

Job test = new Job();           
test = (Job)jobQueue.Peek();

但是当我打印出来时,我收到"工作"

Console.WriteLine(test);

当我使用时,我还收到了编译器错误:

test = jobQueue.Peek();
Error 1 Cannot implicitly convert type 'object' to 'Job'. An explicit conversion exists     
(are you missing a cast?)

基本上,这里的目标是将作业存储在队列中并访问作业的各个属性。

非常感谢!

如何在队列中放置和访问类类型的对象

首先,您需要使用Queue<Job> 。非通用版本适用于旧版本的 .Net Framework,您不应再将其用于新代码。

其次,不能仅通过调用 Console.WriteLine() 来打印自定义类的属性(它们不称为属性)。您需要单独打印它们,例如:

Console.WriteLine("Id = {0}", test.id);
Console.WriteLine("numBytes = {0}", test.numBytes);
Console.WriteLine("requiredTime = {0}", test.requiredTime);

或者覆盖ToString()方法,如其他答案所述。

您希望改用通用队列:

Queue<Job> jobQueue = new Queue<Job>();

会看到打印的"作业",因为您没有覆盖ToString()

首先,使用 Queue<T> 而不是 Queue

然后,重写 Job 类的 ToString() 方法:

public override string ToString()
{
     return string.Format("id: {0}, numBytes: {1}, requiredTime: {2}", id, numBytes, requiredTime);
}

然后,从队列中获取作业信息后,使用 ToString() 方法打印出信息:

Job test = new Job();           
test = jobQueue.Peek(); // casting isn't longer necessary, because you use a Queue<T>
Console.WriteLine(test.ToString());