如何从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>
。你说,"在编译时我不知道这个列表将包含什么。当我访问元素的成员时,只需在执行时动态绑定即可。"
考虑到你将绑定延迟到执行时间,为什么你会对智能感知无法判断列表中的内容感到惊讶呢?
在我看来,你应该改变你的代码,使用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>();
然后智能感知将变得足够智能,以显示建议;)