我有一個類計數器按鍵計數的東西。簡化:IEnumerable <T, int>,Arity和泛型類型定義
public class Counter<T> {
private Dictionary<T, int> counts;
public void Increment(T key) {
int current;
bool exists = counts.TryGetValue(key, out current);
if (exists) {
counts[key]++;
} else {
counts[key] = 1;
}
}
}
它做了一些專門的,以我的需要其他的東西,但是這是本質。到目前爲止,它工作得很好。
現在我想讓它在Linq查詢中使用(同時使用鍵和值)。做到這一點,我想我需要實現
IEnumerable<T, int>
於是我說:
public class Counter<T> : IEnumerable<KeyValuePair<T, int>> {
// ...
IEnumerator<KeyValuePair<T, int>>
IEnumerable<KeyValuePair<T, int>>.GetEnumerator()
{
return ((IEnumerable<KeyValuePair<T, int>>)counts).GetEnumerator();
}
System.Collections.IEnumerator
System.Collections.IEnumerable.GetEnumerator()
{
return counts.GetEnumerator();
}
不幸導致編譯器錯誤
提供的通用參數數量不等同於泛型類型定義的參數。 參數名:實例
問題
- 到底什麼是元數?
- 我在正確的道路上使這種類型可用Linq?
- 如何解決實施問題?
UPDATE:錯字
我有一個錯字,同時簡化了我的代碼發佈。該代碼實際上是在試圖實施IEnumerable<KeyValuePair<T, int>>
而不是IEnumerable<T, int>
在#1。 IEnumerable。 *一* *這是* arity。*您正試圖提供。 –
2013-04-29 03:20:51
@AnthonyPegram:只有一個*泛型類型參數*。其他類型* int *是固定的。這是不允許的?你能幫我一個參考嗎? – 2013-04-29 03:23:21
** Downvoter **:我希望知道你在這個問題上找不到什麼。 – 2013-04-29 03:24:09