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

Это правильный способ использования динамических переменных в 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;
    }
}

1 ответ

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

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

Другие вопросы по тегам