2014-09-29 35 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