如何遍历List <dynamic> </dynamic>

时间:2014-09-24 09:24:42

标签: c# list dynamic dictionary

我有一个包含动态List的类,我设法像这样访问它。

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; }
}

&#34; SS&#34;现在包含一个对象列表,但不知道如何将这些值添加到Dictionary或列表中。 一个注意事项我还需要调整键名。

我试图做的事情:

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

foreach语句不能对类型为&#39; System.Collections.IEnumerable&#39;的变量进行操作。因为&#39; System.Collections.IEnumerable&#39;不包含&#39; GetEnumerator&#39;的公开定义

动态对象也没有为我提供访问密钥和/或值的选项。

任何帮助我如何循环使用这将是非常受欢迎的。

当我把它放在运行时&#34;我&#34;虽然它的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;
                }
            }
        }

2 个答案:

答案 0 :(得分: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();
    }

答案 1 :(得分:0)

DEFAULT