【问题标题】:How do I copy every key/value pairs from Dictionary<string, string> to IDictionary?如何将每个键/值对从 Dictionary<string, string> 复制到 IDictionary?
【发布时间】:2014-03-23 04:40:05
【问题描述】:

我正在尝试如下操作:

exception.Data = LoggedProperties;

但它不被接受,因为异常类上的 Data 属性有一个私有设置器。

所以我想在第一个或第二个字典上继续使用ForAll。但是这个类没有类似的语法。

Dictionary.Keys 也不允许这样做。

他们也没有AddRange

那么,您将如何使用紧凑的语法从一本字典复制到另一本字典?

即使用 Linq 还是 lambda 表达式?

【问题讨论】:

  • 您到底想达到什么目的? Dictionary 将实现该接口...
  • Dictionary 已经是一个 IDictionary
  • @mrlucmorin:是的,但我仍然需要这样做。原因很简单。 exception.Data 有一个私人设置器。所以我不能做异常。Data = LoggedProperties
  • @Sam,你想做什么?界面形式的东西对你有什么帮助?创建您自己的异常来保存这些详细信息。
  • 还是不太清楚你在问什么?您是否要分配给私有财产?你不能,这就是private 的意义所在。 OR 您是否尝试将所有键值映射从一个字典放入另一个字典?是哪一个?

标签: c# dictionary collections


【解决方案1】:

要么将你的异常包装在另一个 - (因为它是一个 virtual 属性,你可以覆盖它):

public class ExceptionTest : Exception
{
    private Dictionary<string, string> InternalData { get; set; }
    public ExceptionTest(Dictionary<string, string> data)
    {
        InternalData = data;
    }

    public override Dictionary<string, string> Data 
    {
        get 
        {
            return InternalData;
        }
    }
}

或者您也可以只遍历字典,每轮调用.Data.Add

不过两者都不漂亮。

至于复制字典,因为两边都是字典,所以也很简单:

var newDictionary = new Dictionary<string, string>(originalDictionary);

或:

var newDictionary = originalDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

【讨论】:

  • 好主意!但是您也可以帮助我将一个字典中的所有键值映射放到另一个字典中,而无需使用 for 和 foreach。我的意思是我想在一行中做。就像使用 ForAll 构造一样。
  • 你打算这个副本做什么?如果我在字典 1 中有 6 个值,在字典 2 中有 9 个值,那么字典会得到 6 个 more 值并且总共有 15 个值,还是字典 2 完全被 覆盖 6 个值?
  • 目标字典将为空。所以我想做完全相同的事情:foreach(var p in LoggedProperties) {exception.Data.Add(p.Key, p.Value)}
猜你喜欢
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2014-10-22
  • 1970-01-01
相关资源
最近更新 更多