在C#中使用带有动态变量的LINQ



这是在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

相关内容

  • 没有找到相关文章

最新更新