0

为了汇总某些特定值的出现次数,我使用的是 a dictionary<valueName:string, counter:int>,我并不确切知道这些值。所以我写了一个方法SetOrIncrement,据说它被用作

myDictionary.SetOrIncrement(name, 1);

然而,有 VisualStudio 抱怨

“字典不包含'SetOrIncrement'的定义,并且找不到接受'Dictionary'类型的第一个参数的扩展方法'SetOrIncrement'。”

谁能告诉我是什么原因?

这是SetAndIncrement方法:

public static class ExtensionMethods
{
    public static int SetOrIncrement<TKey, int>(this Dictionary<TKey, int> dict, TKey key, int set) {
        int value;
        if (!dict.TryGetValue(key, out value)) {
           dict.Add(key, set);
           return set;
        }
        dict[key] = ++value;
        return value;
    }
}
4

2 回答 2

1

尝试这个:

void Main()
{
    var dict = new Dictionary<string, int>();
    dict.SetOrIncrement("qwe", 1);
}

// Define other methods and classes here
public static class ExtensionMethods
{
    public static int SetOrIncrement<TKey>(this Dictionary<TKey, int> dict, TKey key, int set)
    {
        int value;
        if (!dict.TryGetValue(key, out value)) {
           dict.Add(key, set);
           return set;
        }
        dict[key] = ++value;
        return value;
    }
}
于 2013-08-02T12:07:39.683 回答
1

你的扩展方法编译正确吗?当我尝试编译它时,我得到:“类型参数声明必须是标识符而不是类型”。

原因是在这一行:

public static int SetOrIncrement<TKey, int>(this Dictionary<TKey, int> dict, TKey key, int set) {

方法的int泛型参数中的 无效。相反,这应该有效:

public static int SetOrIncrement<TKey>(this Dictionary<TKey, int> dict, TKey key, int set) {

原因是它TKey是唯一变化的类型。int 始终相同,因此不是通用参数。

于 2013-08-02T12:08:33.047 回答