【问题标题】:Assign Dictionary<int, List<string>> to empty new declared dictionary将 Dictionary<int, List<string>> 分配给空的新声明字典
【发布时间】:2017-03-11 13:28:56
【问题描述】:

我有一本字典,如下:

var objListColor = new List<String>() { "Red", "Blue", "Green", "Yellow" };
var objListDirection = new List<String>() { "East", "West", "North", "South" };

var dictFrom = new Dictionary<int, List<String>>();
dictFrom.Add(1, objListColor);
dictFrom.Add(2, objListDirection);

我有另一个字典声明,如下所示:

var dictTo = new Dictionary<int, List<String>>();

我想用dictFrom 的键和值填充dictTo。如何使用 LINQ 或 C# 填充?我想用 foreach 或 for 循环分配值和键。

【问题讨论】:

  • 它被称为复制构造函数,字典有一个。值得一提的是,它执行的是浅拷贝。执行这个:var dictTo = new Dictionary&lt;int, List&lt;String&gt;&gt;(dictFrom); dictFrom[1][0] = null; 然后查看dictTo 的值 - 第一项中的第一个字符串将是null
  • 例如,你有两个字典。dictFrom 有 value 和 key。 var dictto = new Dictionary>(); var dicfrom = new Dictionary>();如何使用复制构造函数用 dicFrom 填充 dictTo。
  • 你不能......但是这样做的方法是一个完全不同的问题......
  • @Dvlpr 如果您有办法将onemodelclass 映射到differentmodelclass,那么您可以像var dictTo = dictFrom.Select(kvp =&gt; kvp.Key, kvp =&gt; kvp.Value.ConvertToDifferentModelClass()) 一样投影它

标签: c# .net list dictionary


【解决方案1】:

字典有一个复制构造函数:

var dictTo = new Dictionary<int, List<String>>(dictFrom);

这会将 dictFrom 的内容复制到 dictTo 中。修改 dictTo 不会影响 dictFrom(反之亦然),因为 dictTo 是一个实际的浅拷贝。

列表和其他一些集合具有类似的功能。

MSDN:https://msdn.microsoft.com/en-us/library/et0ke8sz(v=vs.110).aspx

【讨论】:

  • var dictto = new Dictionary>(); var dicfrom = new Dictionary>();你怎么能使用 var dictTo = new Dictionary>(dictFrom);
  • @Dvlpr:如果密钥是不同类型的列表,它将不起作用。在这种情况下,您可能应该只编写一个循环。
  • 如何写循环?当我写循环时,错误发生如上。
  • 但是您添加到问题中的上述循环中的问题不是您现在描述的问题(通用列表是不同类型的)。你需要解决哪个问题?您可能应该针对您实际需要解决的问题提出一个单独的问题。 :)
【解决方案2】:

您可以使用 Dictionary 的构造函数来接收另一个 Dictionary:

var dictTo = new Dictionary<int, List<String>>(dictFrom);

参考MSDNhttps://msdn.microsoft.com/en-us/library/et0ke8sz(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2018-01-25
    • 2014-08-13
    • 2015-07-02
    • 2021-10-04
    • 2012-11-22
    相关资源
    最近更新 更多