我的代码就像这样
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上没有任何内容?我做错了吗?
答案 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
方法