当它们分别传递给Action <t>时,如何访问List <dynamic>中的对象?

时间:2015-05-13 18:13:13

标签: c# .net dynamic lambda expandoobject

道歉,如果这是重复但我无法找到它。

这是我问题的本质。我们假设我有一个包含动态对象的List<T>

var collection = new List<dynamic> 
{
    new { Foo = 1, Bar = "Test Text..."},
    new { Foo = 2, Bar = "Test Text #2..."},
    new { Foo = 3, Bar = "Test Text #3..."},
};

现在,假设我们要迭代此集合,并将每个dynamic传递给Action<T>。特别是在我的情况下,我需要将我的对象传递给Parallel.Foreach调用。我已经能够构建以下代码,并且应用程序可以正确构建。

Parallel.ForEach(collection, (s) => 
    { 
        Console.WriteLine("Success!");
    });

当然,在我们对参数进行操作之前,这基本上是无用的。我需要做的是访问lambda中的s参数。

这样的事情:

Parallel.ForEach(collection, (s) => 
    { 
        Console.WriteLine("Foo = {0}, Bar = {1}", s.Foo, s.Bar);
    });

然而,当我尝试编写这样的代码时,我得到一个VS错误说明:

  

无法找到编译动态表达式所需的一种或多种类型。你错过了参考吗?

如何从lambda表达式中访问我的动态对象?

1 个答案:

答案 0 :(得分:0)

这是正确的语法。该项目缺少对Microsoft.CSharp .Net程序集的引用。 (DOH!)