Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 当TryGetValue方法返回true时更新字典中的值_C#_.net - Fatal编程技术网

C# 当TryGetValue方法返回true时更新字典中的值

C# 当TryGetValue方法返回true时更新字典中的值,c#,.net,C#,.net,如果Dictionary.TryGetValue方法返回true,则参数value包含与指定键关联的值 我已经阅读了一些更改与指定键关联的值的示例:调用TryGetValue方法后,索引器执行与键关联的值的更新,从而进一步访问字典(请参阅以下代码) 为什么不直接使用对象来更新值,如下面的代码所示 MyClass obj; if (d.TryGetValue(key, out obj)) { obj.Update(...); // update the value } 假设一开始它是可变

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

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

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

MyClass obj;
if (d.TryGetValue(key, out obj))
{
    obj.Update(...); // update the value
}
假设一开始它是可变的,那么使用现有的查找结果绝对有意义。您展示的第一段代码毫无意义地低效


寻找更好的示例:)

示例代码与实际代码不同。它演示了一个给定的点,而不是其他。这可能意味着很多示例都是次优的(我们是否都能保证永远不要在linq示例代码中使用实际上并不需要的
ToList()
?我确信这就是为什么在唯一的效果是使代码变慢时经常使用它的原因),还有很多示例是毫无意义的

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

对于可变引用类型,第二个版本确实更合理,坦率地说是一个更好的示例,但作者可能只是想思考另一个特性的另一个示例,这是一种不同于我们在编写实际代码时所承受的精神压力。在某些方面,情况正好相反(我们想让知名人士胜于异国情调,而教程作者必须使用每一个特性来解释它们)

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