【发布时间】:2014-01-10 07:33:02
【问题描述】:
为了了解更多关于 Func Delegates 和 Expression 树的信息,我整理了一个简单的例子,但是我没有得到我期望的结果。下面是我的代码,它有一个 Func,它需要一个 Params 类和一个产品列表。这个想法是应用 Params 类作为产品列表的过滤器。正如我所说,这只是一个练习,让我了解这一切是如何运作的。
我希望委托返回至少一个 Product 对象,但它返回 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... -
List<Product> prods = filterFunc(param, products).ToList()是否也为空?