2014-10-31 6 views
0

Правильно ли это использовать динамические переменные в C#?Использование LINQ с динамическими переменными в C#

Я получаю ошибку ниже, когда я пытаюсь использовать LINQ выражения с динамической переменной ..

Ошибка - Не удается использовать лямбда-выражение в качестве аргумента к динамически отправленной операции без первого приведения его в качестве делегата или выражение типа дерева

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace TestApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      dynamic dAnimal = new Animal(); 
      string cc = dAnimal.x; 
      Animal oAnimal = new Animal(); 
      var test1 = oAnimal.listFood.Where(a => a.foodName == ""); 
      var test2 = dAnimal.listFood.Where(a => a.foodName == "");//Error 
     } 
    } 

    public class Animal 
    { 
     public string animalName {get; set;}; 
     public List<Food> listFood; 
    } 

    public class Food 
    { 
     public string foodName; 
    } 
} 
+0

Вы можете просто нарисовать dAnimal.listFood для IEnumerable

ответ

0

Мое понимание проблемы заключается в том, что dAnimal.listFood тип неизвестен во время компиляции, потому что dAnimal является динамическим. Таким образом, компилятор не может гарантировать, что listFood IEnumerable, и этот элемент имеет foodName. Тем не менее, если вы будете использовать делегат, каждый элемент listFood будет неявным образом передаваться в тип входного параметра делегата (у вас все еще будет проблема с типом коллекции).

В любом случае, в этом контексте нет необходимости использовать dynamic.