比较问题的另一个列表。我现在想比较一个项目的数量与另一个数量,如果第一个项目的数量大于或等于第二个项目,则返回true。
public bool Equals(Item item1, Item item2)
{
if (item1.ItemName.Equals(item2.ItemName) && item1.ItemCount >= item2.ItemCount)
{
return true;
}
但无论第一项的数量是多少,它总是返回true。这个代码块有问题还是其他地方的问题?
var commonItems = Items.Intersect(Inventory.Items, new ListComparer()).ToList();
if (commonItems.Count() == Items.Count())
{
return Output;
}
这是我比较列表的地方。项目将有3个类Item对象。 1块岩石,1根树枝和2棵藤蔓。这与我的库存进行比较,即使我只有1个藤,它也会返回true。
忘了添加第一个代码块在一个名为
的类中public class ListComparer :IEqualityComparer<Item>
答案 0 :(得分:1)
所以你有一个像[1 rock, 1 twig, 3 vine]
这样的“食谱”,你想知道你的库存是否包含至少具有所需数量的所有物品。
这是您可以使用的一种方式:
if (Recipe.All(r => Inventory.Any(i =>
i.Name == r.Name && i.ItemCount >= r.ItemCount))))
因此,“如果每个食谱项目与至少具有所需数量的库存项目匹配”。这假设两个列表中都没有多个堆栈。
您不应该做的是将Equals
重新定义为除“等于”之外的任何内容。许多框架代码在假设Equals将一致地工作的情况下工作 - 例如,a.Equals(b)的结果将与b.Equals(a)相同。这可能是你当前绊倒的原因,因为你的代码没有提供这个,而Intersect
方法将依赖它。