Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较列表的值_C# - Fatal编程技术网

C# 比较列表的值

C# 比较列表的值,c#,C#,另一个问题。现在我想将一个项目的数量与另一个项目的数量进行比较,如果第一个项目的数量大于或等于第二个项目,则返回true public bool Equals(Item item1, Item item2) { if (item1.ItemName.Equals(item2.ItemName) && item1.ItemCount >= item2.ItemCount) { return true; } 但不管第一项的数量是多少,它

另一个问题。现在我想将一个项目的数量与另一个项目的数量进行比较,如果第一个项目的数量大于或等于第二个项目,则返回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;
}
这就是我比较清单的地方。Items将具有Item类的3个对象。一块石头,一根树枝和两棵藤蔓。这是比较我的库存,即使我只有1藤它返回真

忘记添加第一个代码块在一个名为

public class ListComparer :IEqualityComparer<Item>
公共类ListComparer:IEqualityComparer
所以你有一个“食谱”,比如
[1块石头,1根树枝,3棵藤蔓]
,你想知道你的库存中是否有至少符合要求数量的所有物品

以下是您可以使用的一种方法:

if (Recipe.All(r => Inventory.Any(i => 
    i.Name == r.Name && i.ItemCount >= r.ItemCount))))
因此,“如果每个配方项目至少与所需数量的库存项目匹配”。这是假设两个列表中都没有多个堆栈


你不应该做的是重新定义
Equals
来表示除“Equals”之外的任何内容。很多框架代码都是在假设Equals将持续工作的情况下工作的——例如,A.Equals(b)的结果将与b.Equals(A)的结果相同。这可能是目前让您感到困惑的原因,因为您的代码没有提供此功能,而
Intersect
方法将依赖它。

我在您的代码中没有看到任何列表。问题在于Item类的ItemCount成员(如果您的项目与确切名称匹配-区分大小写)呃,您正在破坏
Equals
的语义(请参阅本页的一半)。奇怪的事情就要发生了。如果a等于b,那么b应该等于a。你想用它实现什么?像minecraft或terrariaOK这样的工艺系统,稍微宽泛一点,你想从返回输出的代码中得到什么?你在检查两个列表是否包含相同的项目吗?这对我来说更有意义。r和i变量来自哪里?啊,这是lambda语法。它们就像
foreach
变量,基本上-
r
将依次设置到
配方中的每个项目,例如。哦,我有一个大脑放屁。。。但这仍然不能正常工作。我可以有1个vine,输出仍将返回。找到错误。列表中的ItemCount变量设置错误。但这现在起作用了:)