Funcデリゲートとエクスプレッションツリーの詳細については、簡単な例を示しますが、期待した結果が得られません。以下は、ParamsクラスとList of Productsが必要なFuncを持つコードです。この考え方は、Paramsクラスを製品のリストに対するフィルタとして適用することです。私が言ったように、これは私がこのすべての仕組みを学ぶための運動です。Funcデリゲートを使用した値の返却
デリゲートが少なくとも1つの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()'もnullですか? –