2014-09-29 36 views
-2

我有一个C#类,它有3个私有成员,两个Queue<uint>Queue<int>之一。我试图创建一个单一的功能,我可以通过队列进入,将他们的长度修剪到一个特定的值,但我没有能够得到任何东西编译。我已经尝试以下在C#中使用队列<T>#

private Queue<uint> a; 
private Queue<int> b; 

... 
this.trimQueue(a); 
this.trimQueue(b); 
... 
private void trimQueue(Queue<t> tempqueue) 
{ 
    while (tempqueue.Count > _MAX_VALUES) 
    { 
      tempqueue.Dequeue(); 
    } 
} 

我也尝试了以下,没有运气。

private void trimQueue<t>(t tempqueue) where t : Queue<t> 

有人能指出我在正确的方向。

更新:这似乎是正确的答案是

private void trimQueue<T>(Queue<T> tempqueue) 

但响应删除了:(

+1

谷歌“C#如何写一个通用的方法”,采取的第一个打击。 – 2014-09-29 04:14:39

+0

什么是编译错误消息? – bit 2014-09-29 04:14:44

+0

@HansPassant。我把你推荐的谷歌搜索的第一个链接,但它没有回答这个问题。你有具体的链接谷歌指出你呢? – packetbasher 2014-09-29 04:36:12

回答

0

请注意,Queue<int>Queue<uint>被视为不同类型。

因此,你必须做出trimQueue方法也通用:使用类型是

private void trimQueue<T>(Queue<T> tempqueue) 
{ 
    while (tempqueue.Count > _MAX_VALUES) 
    { 
     tempqueue.Dequeue(); 
    } 
} 

电话:

this.trimQueue<uint>(a); 
this.trimQueue<int>(b); 
0

您可以使用private void TrimQueue<T>(Queue<T> queue) 也限制T优还可以添加where T : struct

+1

在'T'上添加一个约束是毫无意义的,因为这个方法中没有任何东西依赖于关于'T'的任何特定的东西。即使不需要,为什么要阻止某人修改引用类型的队列? – jmcilhinney 2014-09-29 05:07:27