我有一个类Counter可以按键计数。简化:
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();
}
不幸的是,这会导致编译器错误
提供的泛型参数的数量不等于泛型类型定义的数量。参数名称:实例化
问题
- 什么是arity?
- 我是否在正确的道路上使这种类型可以从 Linq 中使用?
- 如何修复实施?
更新:错字
在简化要发布的代码时,我有一个错字。该代码实际上是在尝试实现IEnumerable<KeyValuePair<T, int>>
而不是IEnumerable<T, int>