C# 如何从列表中获取数据<;动态>;()?

C# 如何从列表中获取数据<;动态>;()?,c#,dynamic,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.Create

我的代码是这样的

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

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

Intellisense不会显示建议,因为数据是动态的,它不知道显示什么

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

此外,这里不需要
动态
对象。因为您想要的是定义良好的类,所以只需使用必要的属性和方法定义类,然后创建列表:

List<YourClass> list = new List<YourClass>();
List List=新列表();

然后Intellisense将变得足够智能,能够显示建议

您无法从Intellisense获得任何信息,因为您有一个
列表。您的意思是,“我不知道在编译时这个列表将包含什么。当我访问元素的成员时,只需在执行时动态绑定它。”

考虑到您将绑定延迟到执行时间,为什么Intellisense无法说出列表中的内容会让您感到惊讶

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

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

您无法像这样访问动态成员,请尝试并使用方法

…那么为什么要使用
动态
?OP具有明确定义的类型。就这样吧。@SimonWhitehead,这是什么类型的?你能告诉我这样我就可以编辑了吗?我没有遇到Node等。。OP正在使用的类型的名称是什么?您不需要知道。OP将匿名对象存储到动态对象列表中。OP只需要定义一个实际对象(而不是匿名对象)并按此方式键入列表-boom,intellisense。@SimonWhitehead,我的编辑可以吗?为什么要使用
动态
?这里有一个明确定义的类型。创建一个类并使用它。@SimonWhitehead同意。完全滥用
动态
var eventDocs = eventtypeNode.GetDescendantsNodes()
      .Select(node => new { Id = node.Id, 
                            Name = node.Name, 
                            CreatedOn = node.CreateDate,
                            Path = node.GetProperty("document").Value })
      .ToList();