2015-03-16 1 views
0

J'ai une méthode qui contient le paramètre BlockingCollection<T> file d'attente, et T doit étendre ma classe QueueItem (ça marche bien sans le générique).Pourquoi je reçois une erreur de compilation en C# avec

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

L'erreur de compilation sur if (queue.TryTake(out frame, -1)): « la méthode a des arguments invalides

Pourquoi

Modifier la définition de la méthode est:

BlockingCollection<T> TryTake(T, Int32) 
+3

Quelle est la définition de 'TryTake'? – dario

+2

@ king.code https://msdn.microsoft.com/fr-fr/library/dd287154(v=vs.110).aspx –

Répondre

4

frame devrait être un T mais vous fournissent un QueueItem Modifier le type de frame:

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