【发布时间】:2014-07-29 11:11:18
【问题描述】:
我有一个有趣的问题。我需要编写一个通用(我会使用“通用”一词,但这会与我所追求的内容相冲突)例程,我可以将一个字典对象实例的实例交给一个字典,并将所述对象的内容作为字典进行迭代并将内容作为文字值返回。困难在于方法参数将是“对象”类型,而不是字典。
我现在需要但不知道该怎么做,是一种迭代任意键和值的Dictionary<K, V> 的方法。如果您知道输入的类型,这很容易做到,但正如我所说,字典的起源将作为 object.GetType().GetInterfaces() 在结果中具有 typeof(IDictionary) 的对象。我不知道(也不应该知道)字典键类型或值类型。
我目前的需要是处理Dictionary<string, SomeClass>;。一旦我得到键列表,我就可以在每个实例上使用一个 foreach,找出它是一个字符串并从那里继续。使用 Values ,它将成为某个类的实例(该类会发生变化,但我可以将其传递给另一组方法来提取类、提取类的属性并提取这些值)。
请求的主要目的是获得一个方法(或两个或多个),它允许我遍历未知类型的字典并提取键和值,所有这些都不需要在编译时知道类型。上述词典;只是一个例子,我需要能够通过任何字典。目前,我并不担心像 Dictionary<Tuple<int, string, SomeOtherClass>, SomeClass>> 这样的边缘情况,如果我可以从 Dictionary<string, SomeClass>; 开始,我可能可以从那里着手。
它以一种我可以处理但我还没有弄清楚如何去做的形式获取键和值。
【问题讨论】:
-
foreach over 字典有什么问题,它将为您提供键/值对
-
想想你的问题。 “foreach”通常是“foreach(可枚举类型项目)”,其中项目是键或值。特别是因为我知道实例是字典的唯一方法是检查接口,所以我知道没有一种方法可以将对象声明为字典然后引用键和值。由于我不知道类型,我该如何声明一个 foreach?如果我可以使用接口声明一个变量并在运行时将其转换为所需的接口,那么问题就解决了。我不知道有什么方法可以做到这一点,你呢?
-
foreach(var keyValue in (Dictionary)someObject)... metacubed (+1) 的回答展示了如何直接获取键/值,并且可能更适合您的情况。
标签: c# loops object dictionary key