输出C#对象列表

时间:2014-06-27 14:07:38

标签: c#

我有

List<dynamic> events = new List<dynamic>();

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

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

4 个答案:

答案 0 :(得分:2)

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

List<dynamic> events = new List<dynamic>();

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

答案 1 :(得分:1)

你快到了,只需要通过索引访问元素(假设你在集合中有任何东西):

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

答案 2 :(得分:0)

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

List<dynamic> events = new List<dynamic>();

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

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

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

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

答案 3 :(得分:0)

两件事:

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

    DateTime startTime = DateTime.Now;
    List<dynamic> events = new List<dynamic>();
    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);
    }
    
  3. 编辑:由于我输掉​​了比赛,我不妨提出一个更有趣的方法来做到这一点: (这也有向后兼容C#2的奖励,而dynamic只存在于C#4上。)

    public static IEnumerable<object> 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);
    }
    

    Jon Skeet在this answeryield return更多信息。