这是在C#中使用动态变量的正确方法吗?
当我尝试将LINQ表达式与动态变量一起使用时,我得到了以下错误。。
错误-如果不首先将lambda表达式强制转换为委托或表达式树类型,就无法将其用作动态调度操作的参数
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;
}
}
我对这个问题的理解是dAnimal.listFood
类型在编译时是未知的,因为dAnimal
是动态的。所以编译器不能保证listFood
是IEnumerable的,并且它的项具有foodName
属性。然而,若要使用委托,则每个listFood
项都将隐式转换为委托输入参数的类型(集合类型仍然有问题)。
无论如何,在这种情况下都不需要使用dynamic
。