首页 > 解决方案 > 检查字典中是否存在键

问题描述

我有一个遗留代码,它通过执行一些操作将列表转换为字典,如下所示

var items = await processTask;
var itemDict = items.ToDictionary(dto => dto.ClientId, dto => mapper.ConvertTo(dto, hj));

但最近我们开始看到这个问题,看起来我们得到了重复的键

An item with the same key has already been added

解决此问题的最佳方法是什么,这样如果出现重复键,它不应该抛出异常,但我们可以记录它。我们可以在 linq 中执行此操作还是必须在 for 循环中执行此操作?

标签: c#linq

解决方案


不幸的是,您无法在ToDictionary. 你必须先做一些事情ToDictionary来消除它,比如打电话Distinct或类似的。但是最好有一个明确的循环,在那里你有机会用欺骗做某事

var dict = new Dictionary<int, string>(); // whatever mapper converts to
foreach(var dto in items)
{
    if (dict.ContainsKey(dto.ClientId))
    {
        // log duplicate here or do something
        continue;
    }

    dict.Add(dto.ClientId, mapper.ConvertTo(dto, hj));
} 

推荐阅读