gpt4 book ai didi

c# - 如果 Contains 返回 true,则提取列表中的项目

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:02 24 4
gpt4 key购买 nike

我有两个列表 A 和 B,在我的程序开始时,它们都填充了来自数据库的信息(列表 A = 列表 B)。我的程序运行,列表 A 被使用和修改,列表 B 保持不变。一段时间后,我用数据库中的新信息重新加载列表 B,然后对照列表 A 进行检查。

foreach (CPlayer player in ListA)
if (ListB.Contains(player))
-----

首先,对象player是从一个类创建的,它的主要标识符是player.Name。如果 Name 相同,但其他变量不同,.Contains 是否仍会返回 true?

Class CPlayer(
public CPlayer (string name)
_Name = name

在 ---- 我需要使用 ListB 中导致 .Contains 返回 true 的项目,我该怎么做?

最佳答案

List.Contains 的默认行为是它使用默认的相等比较器。如果您的项目是引用类型,这意味着它将使用身份比较,除非您的类通过 Equals 提供另一个实现。 .

如果您使用的是 .NET 3.5,那么您可以将第二行更改为此,这将执行您想要的操作:

if (ListB.Any(x => x.Name == player.Name))

对于 .NET 2.0,您可以实现 EqualsGetHashCode对于您的类(class),但这可能会在其他情况下产生不良行为,您不希望两个播放器对象比较相等,如果它们具有相同的名称但在其他字段上不同。

另一种方法是适应Jon Skeet's answer对于.NET 2.0。创建 Dictionary<string, object>并用 listB 中所有玩家的名字填充它。然后要测试具有特定名称的玩家是否在 listB 中,您可以使用 dict.ContainsKey(name) .

关于c# - 如果 Contains 返回 true,则提取列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2696551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com