如何从List <dynamic>()?</dynamic>获取数据

时间:2014-05-15 06:03:41

标签: c# dynamic

我的代码就像这样

var eventDocs = new List<dynamic>();     
foreach (var node in eventtypeNode.GetDescendantNodes())
{
    string files = node.GetProperty("document").Value;
    eventDocs.Add(new { Id = node.Id, Name = node.Name, CreatedOn = node.CreateDate, Path = files });
}

这很好用。现在我试图从这个动态列表中获取数据

foreach (var eventDoc in eventDocs)
{
     eventDoc.----  //nothing comes on intellisence
}

IntelliSense上没有任何内容?我做错了吗?

3 个答案:

答案 0 :(得分:5)

你不会从Intellisense得到任何东西,因为你有一个List<dynamic>。你说,“我在编译时不知道这个列表将包含什么。当我访问元素的成员时,只需在执行时动态绑定它。”

鉴于您将延迟绑定到执行时间,为什么您会惊讶于Intellisense无法分辨列表中的内容?

在我看来,您应该更改代码以使用LINQ查询开始 - 然后您可以拥有一个已知元素类型的列表,这将是一个匿名类型。

var eventDocs = eventtypeNode.GetDescendantsNodes()
      .Select(node => new { Id = node.Id, 
                            Name = node.Name, 
                            CreatedOn = node.CreateDate,
                            Path = node.GetProperty("document").Value })
      .ToList();

答案 1 :(得分:2)

Intellisense不会显示建议,因为数据为dynamic,并且它不知道要显示的内容。

但你知道它包含什么。所以只需编码,你就可以了。

此外,您不需要dynamic个对象。因为您想要的是明确定义的,只需使用必要的属性和方法定义您的类,然后创建列表:

List<YourClass> list = new List<YourClass>();

然后Intellisense将变得足够智能以显示建议;)

答案 2 :(得分:1)

您无法访问此类动态成员,请尝试使用GetDynamicMemberNames()GetMetaObject方法