我有一个完整填写国家/地区实例的通用国家/地区列表。
List <Country> mylist
此列表包含不同的国家/地区实例,但有些国家/地区的属性“name”具有相同的值。
我如何区分国家“名称”的属性才能获得具有不同名称的国家/地区?
感谢。
电贺。
何。
答案 0 :(得分:5)
您可以将MoreLINQ与DistinctBy
方法一起使用:
var distinctCountries = allCountries.DistinctBy(c => c.Name);
(当然,您不必采用所有MoreLINQ - 您可以将这一个方法与ThrowIfNull
扩展方法一起复制到您的代码中,并相应地保留许可文本。)
答案 1 :(得分:5)
Jon建议使用MoreLINQ,这显然很好,但也许你想避免另一个依赖。在这种情况下,您可以将Enumerable.Distinct
与您自己的IEqualtyComparer<Country>
:
var distinctCountries = myList.Distinct(new EqualityComparerForCountryByName());
//IEqualityComparer
class EqualityComparerForCountryByName : IEqualityComparer<Country> {
public bool Equals(Country x, Country y) {
if(Object.ReferenceEquals(x, y)) { return true; }
if(x == null || y == null) { return false; }
return x.Name == y.Name;
}
public int GetHashCode(Country obj) {
if(obj == null) { return 0; }
return obj.Name.GetHashCode();
}
}