c# - 检查字典中是否存在键
问题描述
我有一个遗留代码,它通过执行一些操作将列表转换为字典,如下所示
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 循环中执行此操作?
解决方案
不幸的是,您无法在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));
}
推荐阅读
- ios - 如何从 ARDirectionalLightEstimate 获取主光强度等值
- java - 为什么整数比较会给出错误的结果?
- amazon-s3 - S3 Bucket 非加密 HLS 有效,但 CloudFront 无效
- apache-spark - Spark SQL 中使用的嵌套 java bean
- deployment - 在 JBOSS EAP 7.1 中,如何将 EJB 和 undertow 的统计启用设置为 True?
- c# - 如何在 web.config 中使用 url 重写重定向?
- haskell - 不是逆变/逆变/可分/可判定的好例子?
- visual-studio - 修复退出代码 -2147024891 JetBrains ResharperTestRunner 无法启动
- ruby-on-rails - 将对象导出到当前内联显示数据的 csv 文件
- xslt-2.0 - 无法在 XSLT 中使用 group by 对元素值进行分组