Использование 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
в данном контексте.