0

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

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?)

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

非常感谢!

4

3 回答 3

1

首先,您需要使用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()其他答案所描述的方法。

于 2013-10-06T17:04:55.660 回答
1

您想改用通用队列:

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

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

于 2013-10-06T17:04:56.823 回答
0

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

然后,覆盖ToString()你的Job类的方法:

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());
于 2013-10-06T17:04:33.840 回答