【发布时间】:2013-06-25 22:16:58
【问题描述】:
我想确认https://stackoverflow.com/a/10387423/368896 的答案是正确的并且适用于以下情况:
// These IDataHolder instances contains a property "name",
// and another data member that is a large array.
// A copy constructor exists that makes a deep copy.
public MyFunction(IEnumerable<IDataHolder> columns)
{
// Is the copy constructor called?
this.columns = columns.ToDictionary(c => c.info.name, c => c);
}
我相当有信心没有调用了复制构造函数;即,对toDictionaary 的调用不会执行深层复制,而只会复制引用。
但是,我找不到对此的确认。
我说的对吗? toDictionary() 是否只执行浅拷贝?
(注意:我有很强的 C++ 背景,但对 C# 很陌生。)
【问题讨论】:
-
是的,仅浅拷贝(编辑:我的意思是,复制引用。在这种情况下,它不会对
c元素进行浅拷贝,但本质上是对 dictionary 进行浅拷贝)。如果你想做一个深拷贝,你可以调用ToDictionary重载,让你投影键/值并自己手动调用拷贝构造函数。 -
浅拷贝。仅供参考,使用LINQPad,您可以在 30 秒内测试出这种假设。它甚至还有便携版。
标签: c#