输出C#对象列表

我有

List events = new List(); for (int i = 0; i < 3000; i++) { if (i % 2 == 0) //is even { var dataStart = new { TimeId = startTime.AddSeconds(i), ValueStart = i }; } } 

如何输出List对象中的内容? 我对C#很新,所以我试过了

 for (int j = 0; j < events.Count; j++) { Console.WriteLine(events); } 

但这不起作用。 关于正确输出对象值需要做什么的任何想法?

首先, 创建的项添加列表中

 List events = new List(); for (int i = 0; i < 3000; i++) if (i % 2 == 0) {//is even events.Add( // <- Do not forget Add new { TimeId = startTime.AddSeconds(i), ValueStart = i } ); 

然后打印出列表

 foreach(var item in events) if (!Object.ReferenceEquals(null, item)) Console.WriteLine("time: {0} value: {1}", item.TimeId, item.ValueStart); 

你几乎就在那里,只需要通过索引访问元素(假设你在集合中有任何东西):

 for (int j = 0; j < events.Count; j++) { Console.WriteLine(events[j].FooProperty); } 

首先,你需要了解你有一个动态类型的List (我不知道那是什么,也许你是本地的类文件)。 它被初始化为

 List events = new List(); 

现在,事件将包含一个dynamic对象元素列表。

当您需要输出它时,您需要引用它。 你需要这样做

 for (int j = 0; j < events.Count; j++) { Console.WriteLine(events[j].SomeProperty.ToString()); } 

此代码将获取事件列表中每个dynamic对象的一些属性,然后将其写入控制台。

两件事情:

  1. 您忘记将元素添加到列表中:

     DateTime startTime = DateTime.Now; List events = new List(); for (int i = 0; i < 3000; i++) { if (i % 2 == 0) //is even { var dataStart = new { TimeId = startTime.AddSeconds(i), ValueStart = i }; events.Add(dataStart); // <-- } } 
  2. 只需使用foreach写入控制台,如下所示:

     foreach (var dataPoint in events) { Console.WriteLine(dataPoint); } 

编辑:由于我输掉​​了比赛,我不妨提出一个更有趣的方式来做到这一点:(这也有向后兼容C#2的奖励,而dynamic只存在于C#4上。)

 public static IEnumerable GetEvents(DateTime startTime) { for (int i = 0; i < 3000; i++) { if (i % 2 == 0) //is even { yield return new { TimeId = startTime.AddSeconds(i), ValueStart = i }; } } } 

你会这样称呼它:

 DateTime startTime = DateTime.Now; foreach (var dataPoint in GetEvents(startTime)) { Console.WriteLine(dataPoint); } 

更多关于yield return的答案 ,Jon Skeet。