【发布时间】:2011-03-20 03:23:09
【问题描述】:
我有一个 Person 对象列表。我想转换为字典,其中键是名字和姓氏(串联),值是 Person 对象。
问题是我有一些重复的人,所以如果我使用这段代码就会爆炸:
private Dictionary<string, Person> _people = new Dictionary<string, Person>();
_people = personList.ToDictionary(
e => e.FirstandLastName,
StringComparer.OrdinalIgnoreCase);
我知道这听起来很奇怪,但我现在并不真正关心重复名称。如果有多个名字,我只想抓住一个。无论如何我可以在上面编写这段代码,所以它只需要其中一个名称并且不会因重复而爆炸?
【问题讨论】:
-
重复项(基于密钥),我不确定您要保留它们还是丢失它们?保留它们需要
Dictionary<string, List<Person>>(或等效项)。 -
@Anthony Pegram - 只想保留其中一个。我将问题更新为更明确
-
你可以在执行 ToDictionary 之前使用 distinct。但是您必须重写 person 类的 Equals() 和 GetHashCode() 方法,以便 CLR 知道如何比较 person 对象
-
@Sujit.Warrier - 你也可以创建一个相等比较器传递给
Distinct
标签: c# linq dictionary