【问题标题】:how to cast a Dictionary<string, object> to a Dictionary<string,Dictionary<string,string>>> [closed]如何将 Dictionary<string, object> 转换为 Dictionary<string,Dictionary<string,string>>> [关闭]
【发布时间】:2014-10-22 20:17:40
【问题描述】:

我动态创建了一个Dictionary&lt;string,object&gt; 并递归地将对象(字典的值)分配给stringDictionary&lt;string,string&gt; 或另一个Dictionary&lt;string,object&gt;。我已经能够编写代码来从string 级别中取出信息,但当它是Dictionary&lt;string,object&gt; 时则不行。

我只是尝试将值转换为Dictionary&lt;string, string&gt;,但会抛出一个错误,指出无法将对象转换为该值。

我知道底层结构是Dictionary&lt;string, string&gt;。如何从对象中收集信息。

【问题讨论】:

  • 您可能知道这一点,但您的编译器却不知道。告诉他(通过铸造)。
  • @speising 这只会导致程序在运行时崩溃。
  • @Servy 为什么?如果对象实际上是 Dictionary,则强制转换应该是有效的。 (注意我在这里说的是 foreach 内部)
  • @speising 但这不是问题所要求的。问题是询问如何将整个外部字典转换为您根本无法做到的。重点是他不想在每次使用字典时都将值转换为实际类型。
  • @Servy 它隐含地是,见中间段落。

标签: c# object dictionary casting


【解决方案1】:

您必须创建所需类型的全新字典,并将旧字典的值转换为它们的实际类型,然后再将它们添加到新字典。当然,这实际上并不需要那么多代码,因为有工具可以掩盖所有正在完成的工作,但仍然需要完成这项工作。

var newDictionary = oldDictionary.ToDictionary(pair => pair.Key,
    pair => (Dictionary<string,string>)pair.Value);

【讨论】:

  • 这么简单但很好的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多