如果两个Name\Type
对在两个列表中都相同,我想在结果列表中删除一组项目。我看到了Union
,但这是行不通的。它给出了所有4个项目。
var data1 = new List<Data>
{
new Data{Name = "N1", Type = "T1"},
new Data{Name = "N2", Type = "T2"},
};
var data2 = new List<Data>
{
new Data{Name = "N1", Type = "T1"},
new Data{Name = "N3", Type = "T3"},
};
var X = data1.Union(data2).Distinct().ToList();
结果应仅包含3个项目,
new Data{Name = "N1", Type = "T1"},
new Data{Name = "N2", Type = "T2"},
new Data{Name = "N3", Type = "T3"},
答案 0 :(得分:1)
这是实现和使用比较器的方式:
class Program
{
static void Main()
{
List<Dog> dogs = new List<Dog>() {
new Dog
{
Age = 1,
Name = "Fuffy"
},
new Dog
{
Age = 1,
Name = "Fuffy"
},
new Dog
{
Age = 10,
Name = "Pizza"
}
};
var result = dogs.Distinct(new DogEqualityComparer()).ToList();
}
}
public class Dog
{
public string Name { get; set; }
public int Age { get; set; }
}
public class DogEqualityComparer : IEqualityComparer<Dog>
{
public bool Equals([AllowNull] Dog x, [AllowNull] Dog y)
{
return x?.Age == y?.Age && x?.Name == y?.Name;
}
public int GetHashCode([DisallowNull] Dog obj)
{
return (obj.Name?.GetHashCode() ?? 0) + obj.Age.GetHashCode();
}
}