【问题标题】:Verify the existence of a dictionary key [duplicate]验证字典键的存在[重复]
【发布时间】:2026-01-25 10:15:01
【问题描述】:

我有这个代码 sn-p,我需要在访问它之前检查字典。

如何在尝试访问之前验证密钥的存在?

foreach (var publication in publications)
            {
                var publicationLinks = links[publication.PublicationId];

                var litigationLink = publicationLinks.FirstOrDefault(x => x.ProcessoId.HasValue);
                if (litigationLink != null)
                {
                    litigationLinks[publication.PublicationId] = litigationLink.ProcessoId.Value;
                    continue;
                }
                var contactLink = publicationLinks.FirstOrDefault(x => x.ContatoId.HasValue);
                if (contactLink != null)
                {
                    contactsLinks[publication.PublicationId] = contactLink.ContatoId.Value;
                }
            }

【问题讨论】:

  • 使用 ContainsKey() 方法。
  • 我更喜欢 TryGetValue 而不是 ContainsKey。 ContainsKey 让您重复内容。最终看起来像 PHP 中的东西
  • @JoelFan ContainsKey + []TryGetValue相比也有性能影响
  • 在我的例子中,“链接”是一个 ILookup。在那种情况下我可以使用 Contains () 吗?

标签: c# .net dictionary


【解决方案1】:

您可以使用ContainsKey 方法或尝试检索与键关联的值:

if (links.TryGetValue(publication.PublicationId, out LinkCollection links))
{
    ...
}

(例如假设linksDictionary<string, LinkCollection>

【讨论】:

  • 或者 out var 那么你就不必假设任何事情了 :)
  • 在我的例子中,“链接”是一个 ILookup。在那种情况下我可以使用 Contains () 吗?
  • @Dolla 那么您可以使用Contains 代替ContainsKey,但TryGetValue 不可用。这不是问题,因为links[publication.PublicationId] 将返回一个空的可枚举,以防查找中不存在该键,使用 Linq 的 Any 可以轻松检测到空值。