Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加或更新具有非引用类型值的词典_C# - Fatal编程技术网

C# 添加或更新具有非引用类型值的词典

C# 添加或更新具有非引用类型值的词典,c#,C#,在将此标记为副本之前,请仔细检查 我正在字典里积累一些数据 Dictionary<string, int> stats; 问题是这段代码对第一次出现的事件执行2次查找,否则执行3次查找。第一次发生没什么大不了的。但是这3个更新的查找非常糟糕。如何改进此功能?您可以在检查容器时获取值。事实上,在这种情况下,您可以使其无条件: int value; stats.TryGetValue(eventName, out value); stats[eventName] = value + e

在将此标记为副本之前,请仔细检查

我正在字典里积累一些数据

Dictionary<string, int> stats;

问题是这段代码对第一次出现的事件执行2次查找,否则执行3次查找。第一次发生没什么大不了的。但是这3个更新的查找非常糟糕。如何改进此功能?

您可以在检查容器时获取值。事实上,在这种情况下,您可以使其无条件:

int value;
stats.TryGetValue(eventName, out value);
stats[eventName] = value + eventValue;
这使用了这样一个事实,即如果没有
eventName
的条目,
value
将为0。如果需要,您可以将其明确化:

int value;
if (!stats.TryGetValue(eventName, out value))
{
    stats.Add(eventName, eventValue);
}
else
{
    stats[eventName] = value + eventValue;
}
不管是哪种方式,你现在只需要一次接一次


或者,您可以使用
ConcurrentDictionary
及其
AddOrUpdate
方法。

您可以在检查包含时获取值。事实上,在这种情况下,您可以使其无条件:

int value;
stats.TryGetValue(eventName, out value);
stats[eventName] = value + eventValue;
这使用了这样一个事实,即如果没有
eventName
的条目,
value
将为0。如果需要,您可以将其明确化:

int value;
if (!stats.TryGetValue(eventName, out value))
{
    stats.Add(eventName, eventValue);
}
else
{
    stats[eventName] = value + eventValue;
}
不管是哪种方式,你现在只需要一次接一次

或者,您可以使用
ConcurrentDictionary
及其
AddOrUpdate
方法