修改特定键的Hashtable值

时间:2017-11-13 19:03:38

标签: c#

我需要增加Hashtable中特定键的值, 这是我的代码(我想在函数期间创建Hashtable, 我希望桌子像那样 - <string><int>):

public void getMssg(string ipSend, string mssg, Hashtable table)
{
    if (table.Contains(ipSend))
        table[ipSend]++;        //error
}

顺便说一下,我可以像上面写的一样定义Hashtable吗?

2 个答案:

答案 0 :(得分:0)

public void getMssg(string ipSend, string mssg, Hashtable table)
{
    if (table.Contains(ipSend))
    {
        int value = (int)table[ipSend];
        table[ipSend] = value + 1;
    }
}

在我看来,字典方法会更好,因为它是类型安全的并且消除了转换。哈希表不适合这种用法。举个例子:

public void getMssg(string ipSend, string mssg, Dictionary<string,int> table)
{
    if (table.ContainsKey(ipSend))
        table[ipSend] += 1;
    else
        table.Add(ipSend, 1);
}

我按照@mjwills的建议更新了上面的代码:TryGetValue优于ContainsKey:

public void getMssg(string ipSend, string mssg, IDictionary<string, int> table)
{
    int result;

    if(!table.TryGetValue(ipSend, out result))
        result = 0;

    table[ipSend] = result + 1;
}

答案 1 :(得分:0)

改为使用Dictionary<string, int>

public void getMssg(string ipSend, IDictionary<string, int> table)
{
    int result;
    if(!table.TryGetValue(ipSend, out result))
        result = 0; // do something if the key is not found
    table[ipSend] = ++result;
}