C# 将.net字典作为对象进行迭代

C# 将.net字典作为对象进行迭代,c#,loops,object,dictionary,key,C#,Loops,Object,Dictionary,Key,我有一个有趣的问题。我需要编写一个常规(我会使用“generic”一词,但这会与我所追求的内容相冲突)例程,我可以传递一个dictionary对象实例的实例,并将所述对象的内容作为dictionary进行迭代,并将内容作为文本值返回。困难在于方法参数的类型是“object”,而不是dictionary 我现在需要的是一种在任意键和值的字典上迭代的方法,但我不知道如何做。如果您知道要输入的类型,那么很容易做到,但是正如我所说的,字典的起源将是一个对象,其中object.GetType().GetI

我有一个有趣的问题。我需要编写一个常规(我会使用“generic”一词,但这会与我所追求的内容相冲突)例程,我可以传递一个dictionary对象实例的实例,并将所述对象的内容作为dictionary进行迭代,并将内容作为文本值返回。困难在于方法参数的类型是“object”,而不是dictionary

我现在需要的是一种在任意键和值的
字典
上迭代的方法,但我不知道如何做。如果您知道要输入的类型,那么很容易做到,但是正如我所说的,字典的起源将是一个对象,其中object.GetType().GetInterfaces()在结果中具有typeof(IDictionary)。我不知道(也不需要知道)字典键类型或值类型

我目前的需要是处理字典里的东西;。一旦我得到键列表,我就可以在每个实例上使用foreach,找出它是一个字符串,然后从那里开始。使用这些值,它将成为某个类的实例(该类将发生变化,但我可以将其传递给另一组方法来提取该类,提取该类的属性并提取这些值)

请求的主要目的是获取一个方法(或者两个或多个方法),该方法允许我在未知类型的字典上迭代并提取键和值,而无需在编译时知道这些类型。上述词典;这只是一个例子,我需要能够通过任何字典。目前,如果我能从
字典开始,我不担心像
字典>
之类的边缘情况,我可能可以从那里开始


它以一种我还没有弄清楚如何处理的形式获取键和值。

您提到您可以访问对象上的接口。然后可以使用和分别访问键和值

另外,
IDictionary
派生自,因此您也可以使用类似于列表的for循环访问键值对列表

编辑-澄清:

IDictionary inputAsDictionary = input as IDictionary;
if (inputAsDictionary != null)
{
    // Valid :  input is a dictionary.
    ICollection dictKeys = inputAsDictionary.Keys; // This is a list of all keys
    ICollection dictValues = inputAsDictionary.Values; // This is a list of all values

    // Iterate over all keys
    for(var dictKey in dictKeys)
    {
        Console.WriteLine(dictKey); // Print the key
        Type dictKeyType = dictKey.GetType(); // Get the type of key if required
        // ...
    }

    // Similarly, iterate over all values
    for(var dictValue in dictValues)
    {
        Console.WriteLine(dictValue); // Print the value
        Type dictValueType = dictValue.GetType(); // Get the type of value if required
        // ...
    }
}

您也可以使用generic
Dictionary
接口来实现这一点,但是获取类型要复杂得多。你需要打电话从那里出发。我所展示的例子似乎更简单。

您能详细说明一下吗?我想我知道你要去哪里,但是作为一个例子,一个代码片段将非常有帮助。在接口列表中,我可以看到(调试模式-查看“propertyType.GetInterfaces()”)调用的内容,“IDictionary”和“IDictionary`2”都在列表中,但我不确定我能用它们做些什么。好的,这对于获取键和值的类型很好,但是(很抱歉这里过于密集),我需要的不是类型,而是组成键或值列表的实际值。例如,如果我有一个Dictionarystring,int,它包含两个条目{{“Key1”,1},{“Key2”,2},我需要能够从键和值中提取“Key1”和“Key2”以及1和2。@Fred哦,上面的示例中已经有了这些条目。每个
dictKey
都是键的实际值,即“键1”、“键2”。每个
dictValue
同样是实际值,即1、2等(手拍额头的声音)!谢谢-我离问题太近了,完全没有注意到。对于延迟将此标记为“答案”表示歉意,我需要在此基础上进行扩展,以实现我的目标-我称之为“ToCode”的方法它将获取一个对象,并输出必要的C#代码,以便稍后初始化该对象的实例。这有利于开发棕色油田开发测试模拟数据。谢谢你的指导,真的很有帮助!foreach over dictionary有什么问题,它会给你提供关键/价值对思考你的问题。“foreach”通常是“foreach(可枚举的类型项)”,其中项是键或值。特别是,因为我知道实例是字典的唯一方法是检查接口,所以我知道没有一种方法可以将对象声明为字典,然后引用键和值。既然我不知道类型,我怎么能声明foreach呢?如果我可以使用接口来声明一个变量,并在运行时将其转换为所需的接口,那么问题就解决了。我不知道怎么做,你呢?
foreach(字典中的var-keyValue)someObject)
。。。metacubed的(+1)答案显示了如何直接获取键/值,可能更适合您的情况。