如何循环遍历 List<dynamic>

3

我有一个包含动态列表的类,我可以通过以下方式访问它:

foreach (var c in objects)
{
    foreach (dynamic i in c.data)
    {
        var ss = i;
    }
}

这个类

public class iUpdateGrid
{
    public int type { get; set; }
    public string session { get; set; }
    public string latitude { get; set; }
    public string longitude { get; set; }
    public string ip { get; set; }
    public int id { get; set; }
    public string station { get; set; }
    public List<iGridData> h_33 { get; set; }
}
public class iGridData
{
    public string table { get; set; }
    public List<dynamic> data { get; set; }
}

"ss"现在包含了一个对象列表,但我不知道如何将这些值获取到字典或列表中。 还有一点需要注意的是,我需要调整键名。

我尝试过的事情:

foreach (KeyValuePair<string, string> kv in i)
{
    string key = kv.Key;
    string value = kv.Value;
}

"foreach"语句无法对类型为'System.Collections.IEnumerable'的变量进行操作,因为'System.Collections.IEnumerable'不包含公共定义'GetEnumerator'

此外,动态对象不能让我访问键和/或值。

任何关于如何循环遍历它的帮助都将非常受欢迎。

当我在运行时放置这个"i"时,它说它是一个System.Collections.Generic.Dictionary,但也可以访问它。

解决方案:

对提供的解决方案进行了少许修改,但这对我有效:

        foreach (var c in objects)
        {
            foreach (dynamic i in c.data)
            {
                foreach (var v in (i as IDictionary<string, object>))
                {
                    string key = v.Key;
                    object value = v.Value;
                }
            }
        }

1
问题是“如何将c.data转换为字典”,对吗?如果是这样,那么c.data的类型是什么? - Eren Ersönmez
此外,错误信息“'System.Collections.IEnumerable' 不包含公共定义 'GetEnumerator'”是没有意义的。它确实包含 GetEnumerator - Eren Ersönmez
动态字典<dynamic, dynamic> - Rezo Megrelidze
不行,已经尝试过了。 - user3763117
我不确定我理解你想做什么,但如果编译器不知道它是什么类型的数据,那么就由你来进行强制转换,对吧?我已经进行了几次测试,似乎都很正常,但不确定如何在代码块中添加注释。 - Daloupe
显示剩余4条评论
2个回答

0
    foreach (var v in (i as IEnumerable<object>))
    {
        if (v is KeyValuePair<string, string>)
        {
            // Do stuff
        }
        else if (v is List<string>)
        {
            //Do stuff
        }

        else throw new InvalidOperationException();
    }

我在 (i as IEnumerable<object>) 上遇到了错误 "对象引用未设置为对象的实例。" - user3763117

0
foreach (var c in objects)
{
    foreach (dynamic i in c.data)
    {
        var property_value = i.GetType().GetProperty("PROPERTY_NAME").GetValue(i);
    }
}

2
虽然这段代码可能回答了问题,但提供有关它如何以及/或为什么解决问题的附加上下文将改善答案的长期价值。 - Donald Duck
2
请描述您的答案,而不只是使用代码。否则,您的答案可能会被删除! - Shakiba Moshiri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接