【发布时间】:2020-06-03 13:25:57
【问题描述】:
我有一本IDictionary<string, LoadingProgressState> 类型的字典
我正在做的是在调用某些函数时更新字典的Value 的属性。
if(CurrentFilesProgress.TryGetValue(key, out var loadingProgress))
{
loadingProgress.DoneLoadings = doneLoadings;
CurrentFilesProgress[key] = loadingProgress;
}
我这样做正确吗?如果没有,更新a的正确方法是什么
字典值的属性?
请注意,我不想创建LoadingProgressState 的新实例,我只想更新它的DoneLoadings 属性。
【问题讨论】:
-
假设
loadingProgress是一个引用类型(根据上下文判断),您不必在字典中再次保存它。您获得参考,然后更改其属性之一;你实际上并没有复制对象。 -
分配是不必要的;变量 loadingProgress 是字典和本地变量共享的引用。因此,当您更改 loadingProgress.DoneLoadings 时,您也因此更改了 CurrentFilesProgress[key],因为它们是同一个变量。
-
所以把
CurrentFilesProgress[key] = loadingProgress;去掉就好了? -
是的,应该不错。我建议您阅读参考与值类型,这是一个有趣的话题。
-
我的错,以为你的问题出在引用类型上。这是out keyword 文档。
标签: c# dictionary generics