In dem Bemühen, mehr über Func Delegates und Expression Bäume zu lernen, habe ich ein einfaches Beispiel zusammengestellt, aber ich bekomme nicht die Ergebnisse, die ich erwarte. Unten ist mein Code, der eine Func hat, die eine Params-Klasse und eine Liste der Produkte erwartet. Die Idee ist, die Params-Klasse als Filter für eine Liste von Produkten zu verwenden. Wie gesagt, dies ist nur eine Übung für mich zu lernen, wie das alles funktioniert.Rückgabe von Werten mit einem Func Delegaten
Ich erwarte, dass der Delegat mindestens ein Product-Objekt zurückgibt, jedoch gibt es null zurück.
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"
}
};
}
Klassen:
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; }
}
Es gibt kein Problem mit Ihrem 'filterFunc' ... aber' ToList() 'gibt eine Instanz von' List 'zurück und' List 'ist nicht der gleiche Typ wie' Products' also gibt der 'as Products' Ausdruck immer' null' zurück ... –
nemesv
Ist 'List prods = filterFunc (param, products) .ToList()' ist auch null? –