函数调用方式
- 方式1.
public static decimal TotalPrices(this IEnumerable<Product> products)
{
decimal total = 0;
foreach (Product prod in products )
{
total += prod?.Price ?? 0;
}
return total;
}
public static IEnumerable<Product> FilterByPrice(this IEnumerable<Product> productEnum,decimal minimumPrice)
{
foreach (Product prod in productEnum)
{
if((prod?.Price??0)>=minimumPrice)//price !=0&&>=minimumPrice
{
yield return prod;
}
}
}
public static IEnumerable<Product> FilterByName(this IEnumerable<Product> productEnum,char firstLetter)
{
foreach(Product prod in productEnum)
{
if(prod?.Name?[0]==firstLetter)
{
yield return prod;
}
}
}
//这里调用了两个函数,一个是判断消费大于20,一个是累加集合。
decimal arrayTotal = productArray.FilterByPrice(20).TotalPrices();
//这里调用了两个函数,一个是判读首字母是否为S,一个是累加集合。
decimal nameFilterTotal = productArray.FilterByName('S').TotalPrices();
- 方法2
// this 是prodcut的前置接口,放在.前面
public static IEnumerable<Product> Filter(this IEnumerable<Product> productEnum,Func<Product,bool>selector)
{
foreach(Product prod in productEnum)
{
if(selector(prod))
{
yield return prod;
}
}
}
// 判断函数 价格》=20,返回值bool类型
bool FilterByPrice(Product p)
{
return (p?.Price ?? 0) >= 20;
}
//这里调用了两个函数,一个filer,读取filerbyprice的BOOL值,一个是累加集合。
decimal priceFilterTotal = productArray.Filter(FilterByPrice).TotalPrices();
//判断函数返回值bool,首字母是S
Func<Product, bool> nameFilter = delegate (Product prod) { return prod?.Name[0] == 'S'; };
//这里调用了两个函数,一个filer,读取namefiler的BOOL值,一个是累加集合。
decimal nameFilterTotal = productArray.Filter(nameFilter).TotalPrices();
- 方法3
//另一种用法
decimal priceFilterTotal = productArray.Filter(p => (p?.Price ?? 0) >= 20).TotalPrices();
decimal nameFilterTotal = productArray.Filter(p =>p?.Name?[0]== 'S').TotalPrices();
三种方法实现的效果一样,第一种最易懂,第三种最简洁(难读)。