为什么我在C#中使用泛型编译错误

时间:2015-03-16 09:58:33

标签: c# generics

我的方法包含参数BlockingCollection<T>队列,而T必须扩展我的类QueueItem(没有通用就可以正常工作)。

private void ProcessQueue<T>(BlockingCollection<T> queue) where T: QueueItem
{
     QueueItem frame;
     while (true)
     {
          if (queue.TryTake(out frame, -1))
          {
              frame.execute();
          }
     }
}

if (queue.TryTake(out frame, -1))上的编译错误:“该方法有一些无效的参数

为什么?

编辑方法定义是:

BlockingCollection<T> TryTake(T, Int32)

1 个答案:

答案 0 :(得分:4)

frame应该是T,但您提供的是QueueItem。更改frame的类型:

 T frame;
 while (true)
 {
      if (queue.TryTake(out frame, -1))
      {
          frame.execute();
      }
 }