爲了更多地瞭解Func委託和表達式樹,我將一個簡單的例子放在一起,但是我沒有得到我期望的結果。下面是我的代碼,它有一個Func,它需要一個Params類和一個產品列表。這個想法是將Params類作爲過濾器應用於產品列表。正如我所說,這只是一個練習,讓我學習如何運作。用Func Delegate返回值
我在等待代理返回至少一個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」和「List 」的實例不是'Products'所以'as Products'表達式總是返回'null' ... –
nemesv
'List prods = filterFunc(param,products).ToList()'也是空的嗎? –