在 ToDictionary 调用中捕获异常



我有一个简单的LINQ语句,它拆分一个字符串,然后将值扔到字典中。问题是字典很少已经具有相同值的现有键,因此会抛出异常并且"dict"的值仍然为空。

dict = lines.Select(l => l.Split('|')).ToDictionary(d => d[0], d => d[1]);

有没有办法修改 LINQ 语句以在插入字典之前检查字典是否已具有密钥,或者捕获异常但继续将其余值写入字典?我尝试在该行周围放置一个 try 块,它捕获了异常,但导致没有添加任何元素,因此字典保持为空。

不要使用ToDictionary而是常规foreach并测试密钥。

中断查询从转换为字典。

var splits = lines.Select(l => l.Split('|'));
var dict = new Dictionary<string,string>();
foreach(var item in splits)
{
   if(!dict.ContainsKey(item[0]))
       dict.Add(item[0], item[1]);
}

您始终可以使用GroupBy为每个键创建一个组,然后只需选择字典中每个键的第一个值;

var dict = lines.Select(x => x.Split('|'))
                .GroupBy(x => x[0], x => x[1])
                .ToDictionary(x => x.Key, x => x.First());

如果你需要字典,每个键保存一个值,你可以使用这个:

var dict1 = lines
          .Select(l => l.Split('|'))
          .GroupBy(s => s[0])
          .ToDictionary(d => d.Key, d => d.First()[1]);

或者你可以使用它,如果你想要Dictionary<string,IEnumerable<string>>,它保存键和相应的值作为IEnumerable<string>

var dict2 = lines
           .Select(l => l.Split('|'))
           .GroupBy(s => s[0])
           .ToDictionary(d => d.Key, d => d.Select(r => r[1]));

相关内容

  • 没有找到相关文章

最新更新