当TryGetValue方法返回true时,更新Dictionary中的值

时间:2012-09-03 08:41:38

标签: c# .net

如果Dictionary<TKey, TValue>.TryGetValue方法返回true,则参数value包含与指定键关联的值。

我已经阅读了一些更改与指定键关联的值的示例:在调用TryGetValue方法之后,索引器会更新与键关联的值,从而进一步访问Dictionary(请参阅以下代码)。

var d = new Dictionary<string, MyClass>();
...
MyClass obj;
if (d.TryGetValue(key, out obj))
{
    d[key].Update(...); // update the value
}

obj对象是对与键关联的值的引用。为什么不直接使用对象来更新值,如下面的代码?

MyClass obj;
if (d.TryGetValue(key, out obj))
{
    obj.Update(...); // update the value
}

2 个答案:

答案 0 :(得分:4)

  

为什么不直接使用该对象来更新值,如下面的代码所示?

假设开始时它是可变的,使用现有的查找结果绝对有意义。您展示的第一段代码效率毫无意义。

寻找更好的例子:)

答案 1 :(得分:1)

示例代码与实际代码不同。它展示了一个给定的点,没有别的。这可能意味着许多示例都是次优的(我们都可以承诺永远不会在linq示例代码中使用ToList()而实际上并不需要它吗?我确信这就是为什么它经常被用来当唯一的效果是使代码更慢)和许多毫无意义的代码。

这甚至都不是坏事。在示例代码中进行注释将描述正在解释的内容,在实际代码中我们应该期望人们理解。同时它不会记录你为什么要做一些奇怪的事情,因为它要么在周围的文本中,要么答案只是“因为它演示了这个功能,仅此而已”。在真实的代码中,任何令人惊讶或奇怪的东西都应该在评论中解释(以及明显的原因,如果你不能写出对古怪的一个很好的解释,你就不像你那样古怪以为你是)。虽然一些初级开发人员的评论可能暗示他们在实际代码中使用前者,但事实是我们在示例中想要评论来解释对知道相关功能的人来说显而易见的事情 - 因为我们与他们并不相似,这就是我们正在阅读的例子,

对于一个可变的引用类型,第二个版本确实更明智,坦率地说是一个更好的例子,但是作者可能只是试图考虑另一个另一个特征的另一个例子,这是一个不同的心理压力比我们在编写实际代码时所处的位置。在某些方面则相反(我们希望在异国情调中有所了解,而教程编写者必须使用每一个功能才能解释它们。)