如何在队列中放置和访问类类型的对象
本文关键字:访问 类型 对象 队列 | 更新日期: 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());