2015-05-13 3 views
0

Извините, если это дубликат, но я не могу его найти.Как я могу получить доступ к объектам в моем списке <dynamic>, когда они передаются в действие <T>?

Вот сущность моей проблемы. Давайте предположим, что у меня есть 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!"); 
    }); 

Конечно, это бесполезно, пока мы не применим параметр. Мне нужно сделать доступ к параметру s в лямбда.

Что-то вроде этого:

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

Однако, когда я пытаюсь написать такой код, который я получаю ошибку VS заявив:

одного или нескольких типов, необходимых для составления динамического выражения не может быть найден , Вам не хватает ссылки?

Как я могу получить доступ к своему динамическому объекту из моего выражения лямбда?

+1

Код, который вы показали, компилируется и работает отлично. Вам нужно будет привести пример, который может воспроизвести проблему. – Servy

+0

Если это происходит через сборки, это не сработает. – krillgar

+0

@krillgar, это не так. Все в рамках одного и того же метода. – RLH

ответ

0

Это правильный синтаксис. В проекте отсутствовала ссылка на сборку Microsoft.CSarp .Net. (Doh!)