如何从List()中获取数据

本文关键字:获取 数据 dynamic List | 更新日期: 2023-09-27 18:03:21

代码是这样的

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
}

没有智能感应?我做错什么了吗?

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

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

考虑到你将绑定延迟到执行时间,为什么你会对智能感知无法判断列表中的内容感到惊讶呢?

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

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

不能这样访问动态成员,试试GetDynamicMemberNames()GetMetaObject方法

智能感知不会显示建议,因为数据是dynamic,它不知道该显示什么。

但是你知道它包含什么。所以只要写代码就行了。

同样,这里不需要dynamic对象。既然你想要的是定义良好的,那就用必要的属性和方法定义你的类,然后创建列表:

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

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