- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想确认 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# 的新手。)
最佳答案
它只会复制对象引用,而不会执行任何克隆(浅克隆或深克隆)。
通常,它会执行structs 的浅拷贝,尽管只是出于结构的按值传递语义的优点。但是在这种情况下,因为您将其键入为接口(interface),所以我相信值类型 will be boxed并且不是浅拷贝。
如果您需要执行自己的元素深拷贝,那么您可以使用this overload。并自己调用复制构造函数:
public MyFunction(IEnumerable<IDataHolder> columns)
{
//replace c.DeepCopy() with whatever the deep copying function is
this.columns = columns.ToDictionary(c => c.info.name, c => c.DeepCopy());
}
主要原因是 C# 没有用于深度复制的 native 内置方法*。这通常会根据开发人员的需要按对象实现。
* 有 some ways to perform generalized deep copying如果您的设计允许,您可以使用它
关于c# - Enumerable.ToDictionary<TSource, TKey> 是否执行深层复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308527/
我想调用一个返回匿名类型的方法。我需要知道这个匿名类型的类型是什么,因为我在一个方法中返回它。这叫“动态”吗?当我调试时,监 window 口显示类型是 <>f__AnonymousType0。 这是
关于 ToDictionary() 的 MSDN 文档并没有多说它实际上是如何工作的。我想知道它是创建字典及其元素的副本,还是只是重复使用相同的引用和枚举器。 例如,如果我有一个 Concurrent
给定以下代码,我无法返回字典。 [JsonProperty] public virtual IDictionary JsonProducts { get { retur
我有一个返回列表的方法,我们称它为GetSomeStrings() . 我在字符串类上有一个扩展方法,返回字符串中的字符数,例如。 myString.Number('A') . 我想在一行中获取字典。
我有一个简单的 LINQ 语句,它拆分一个字符串,然后将值扔到字典中。问题是字典很少已经具有相同值的现有键,因此抛出异常并且“dict”的值保持为空。 dict = lines.Select(l =>
我正在使用 Enumerable.ToDictionary 从 linq 调用中创建一个字典: return (from term in dataContext.Terms where
这个问题在这里已经有了答案: How do you get the duplicate key that ToDictionary() has failed on? (4 个答案) 关闭 7 年前。
我有如下两个模型: public class Complaint { [Key] public int COMP_ID { get; set; } public Nullabl
我不是 C# 和 LINQ 方面的专家。 我有一个Dictionary,我理解是一个哈希表,也就是key没有排序。 dataBase = new Dictionary() Record 是一个用户定义
我有一个像 string strn = "abcdefghjiklmnopqrstuvwxyz" 这样的字符串,并且想要一个像这样的字典: Dictionary(){ {'a',0},
我有一个简单的 Linq 查询: var dict = (from i in Customers select i).ToDictionary(i => i.Id1, i => i.Id2); 尽管查
我有一个字典,我想使用以下示例隐含的规则将其转换为另一个字典: 输入: Dictionary inputs = new Dictionary(3) { { "A", "First" },
最终编辑:我能够在 ini 文件中找到重复的字段。感谢大家的帮助! 我正在使用正则表达式解析 ini 文件,并使用 LINQ 将其存储在字典中: Sample Data: [WindowSetting
我有两个大小相同的字符串列表。我想创建一个字典,键来自listA,值来自listB。 什么是最快的方法? 我使用了代码: List ListA; List ListB;
我有一个要放入字典中的列表,为简单起见,插入的值将全部相同。 我可以使用 foreach 循环。 List list = new List(); list.Add("Earth");
我正在使用 IEnumerable 的 ToDictionary() 扩展方法创建一个 Dictionary 对象: var dictionary = new Dictionary (myCo
如何使用 Linq 将 SQL (2008) 中的两列正确转换为 Dictionary(用于缓存)? 我目前循环遍历 IQueryable b/c 我无法使 ToDictionary 方法工作。有任何
我正在寻找一种获取以下列表的方法: directory = [ { name: "Albert", age: 40, gender: "M"
ExSwift 有一个数组扩展: /** Converts the array to a dictionary with keys and values supplied via th
我有以下代码 public class TestAdaptor { private interface ITargetClass { Guid Id { get; }
我是一名优秀的程序员,十分优秀!