本文整理了C#中给List根据对象属性去重的四种方法。

方法一:循环遍历List,借助Dictionary存储去重的对象。



Dictionary<string, Item> result = new Dictionary<string, Item>();
foreach (Item item in list)//list为待去重列表
{
Item temp;
if (!result.TryGetValue(item.name, out temp))
{
result.Add(item.name, item);
}
}
List<Item> result_list = result.Values.ToList();


方法二:利用ToLookup查找,并转为Dictionary



List<Item> result = list.ToLookup(item => item.name).ToDictionary(item => item.Key, item => item.First()).Values.ToList();


方法三:自定义Compare方法实现



List<Item> result = list.Distinct(new Compare()).ToList();


方法四:利用GroupBy分组实现



List<Item> result = list.GroupBy(item => item.name).Select(item => item.First()).ToList();


其中,对象Item类如下:



public class Item
{
public string name { get; set; }
public string value { get; set; }
}


Compare方法如下:



public class Compare : IEqualityComparer<Item>
{
public bool Equals(Item a, Item b)
{
return a.name == b.name;
}

public int GetHashCode(Item obj)
{
return obj.name.GetHashCode();
}
}