我有一个看起来像下面的功能
cal.set(Calendar.HOUR_OF_DAY, 0):
我正在寻找一个带有多个项目的功能。我正在尝试如下,但这不正确......你能帮我解决一下这个问题吗?
Func<Product, bool> ItemProduct(Iitem item) => (pro)=> pro.ItemID == item.Id;
答案 0 :(得分:1)
从评论中,您可能实际上想要生成一个函数,该函数将拥有Iitem
的枚举并将Product
作为参数,并将返回其所有Iitem
} Id
与ItemID
的{{1}}匹配。就是这样:
Product
像这样使用:
Func<Product, IEnumerable<Iitem>> ItemProduct(IEnumerable<Iitem> items) =>
pro => items.Where(item => pro.ItemID == item.Id);
我会在这里留下我最初的猜测,因为我仍然不确定你真正想要的是什么。
如果var someItems = new [] { new Iitem { Id = 1 }, new Iitem { Id = 2 } };
var f = ItemProduct(someItems);
var prod = new Product { ItemID = 1; }
// Results will be an enumeration that will enumerate a single Iitem, the
// one whose Id is 1.
var results = f(prod);
中的所有 ID与作为参数传入的items
的{{1}}匹配,此方法将返回一个返回true的函数:
ItemID
像这样:
Product
如果你希望函数返回true,如果至少有一个ID匹配,但不一定全部匹配,那么这样就可以了。唯一的区别是Func<Product, bool> ItemProduct(IEnumerable<Iitem> items) =>
(pro) => items.All(item => pro.ItemID == item.Id);
更改为var product = new Product() { ItemID = 1 };
var itemColl1 = new Iitem[] { new Iitem { Id = 1 }, new Iitem { Id = 2 } };
var itemColl2 = new Iitem[] { new Iitem { Id = 1 }, new Iitem { Id = 1 } };
var f1 = ItemProduct(itemColl1);
var f2 = ItemProduct(itemColl2);
bool thisWillBeFalse = f1(product);
bool thisWillBeTrue = f2(product);
:
items.All()
像这样:
items.Any()
答案 1 :(得分:1)
假设您需要返回一个针对给定产品返回true
的函数,如果给定集合中的所有项目与产品Id
具有相同的ItemID
,则表示您可以使用items.All(...)
代替单个ID比较:
Func<Product, bool> ItemProduct1(IEnumerable<Iitem> items)
=> (pro) => items.All(i => pro.ItemID == i.Id);
如果您true
只匹配某些特定项目ItemID
的产品需要Id
,请改用items.Any(...)
:
Func<Product, bool> ItemProduct1(IEnumerable<Iitem> items)
=> (pro) => items.Any(i => pro.ItemID == i.Id);