为了更多地了解Func Delegates和Expression trees,我制作了一个简单的示例,但是我没有得到我期望的结果。以下是我的代码,其中有一个期望Params类和产品列表的Func。想法是将Params类应用为筛选器来筛选产品列表。就像我说的,这只是一个练习,让我了解所有这些都是如何工作的。
我希望委托能够返回至少一个产品对象,但它返回null。
我希望委托能够返回至少一个产品对象,但它返回null。
static void Main(string[] args)
{
Products products = CreateProducts();
Params param = new Params { Val = "ABC"};
Func<Params, Products, IEnumerable<Product>> filterFunc =
(p, r) => r.Where(x => x.Sku == p.Val).AsEnumerable();
Products prods = filterFunc(param, products).ToList() as Products;// returns null
}
private static Products CreateProducts()
{
return new Products
{
new Product{
Price = 25.00,
Sku = "ABC"
},
new Product{
Price = 134.00,
Sku = "DEF"
}
};
}
类:
public class Params
{
public String Val { get; set; }
}
public class Products : List<Product>
{
}
public class Product
{
public String Sku { get; set; }
public double Price { get; set; }
}
filterFunc
没有问题... 但是ToList()
将返回一个List<Product>
实例,而List<Product>
不是与Products
相同的类型,因此as Products
表达式总是返回null
... - nemesvList<Product> prods = filterFunc(param, products).ToList()
是否也为 null? - Konrad Kokosa