2014-06-27 90 views
-1

我试图做一个简单的数据系列测试andeverything如预期运作,但我想改用为什么我不能使用动态?

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

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

当我的列表切换到动态我收到这2错误。 “ ”找不到需要编译动态表达式的一个或多个类型。是否缺少引用?并且这两个错误发生在Console.Writeline

任何想法如何可以输出与动态列表?

这里是我的代码:

[TestMethod] 
     public void TimeSeriesData() 
     { 
      List<dynamic> events = new List<dynamic>(); 
      var stream = new 
      { 
       Id = 15, 
       Name = "StreamA" + 15, 
       TypeId = "TypeA" 
      }; 
      _server.PostStream(stream); 

      DateTime startTime = DateTime.Today; // 12:00 
      DateTime endTime = DateTime.Today; // 12:00 +1 sec 
      endTime = endTime.AddDays(1); 
      endTime=endTime.AddSeconds(1); 

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

        events.Add(startTime.AddSeconds(i)); 
       } 

       else //is odd 
       { 
        var dataEnd = new 
        { 
         TimeEnd = endTime.AddSeconds(-i), 
         ValueEnd = i 

        }; 
        events.Add(endTime.AddSeconds(-i)); 
       } 


      } 

      foreach (var item in events) 
       Console.WriteLine("Time: {0} ", item.ToString()); 
} 
+1

虽然你不应该真的做一个通用列表,而是使用接口或代表行为的东西,你可以在那里使用'object'而不是'dynamic',它会起作用。 –

+0

是否在您的测试项目中引用了“Microsoft.CSharp”?你在'Console.WriteLine'调用中看到了那个错误吗? –

+0

我必须在代码中使用动态调用,特拉维斯......否则我会使用对象 – Mdjon26

回答

-1

不知道,这只是正常工作:

 var l = new List<dynamic>(); 
     l.Add(new {dt=DateTime.Now}); 
     l.Add(DateTime.Now); 

     foreach (var o in l) 
     { 
      Console.WriteLine(o.ToString()); 
     } 

您的代码编译和运行我的机器上的罚款。

+0

您是否在VS测试项目中尝试过这个问题?您是否添加了其他参考?我试过了,这个问题与测试项目中的Console.WriteLine有关。编译代码需要引用“Microsoft.CSharp”程序集。 –

+0

啊,这可以解释它,通常我不会在单元测试中使用Console.WriteLine()。我更喜欢Trace.WriteLine()来捕获输出。 – Darek

相关问题