使用LINQ在c#中从列表中删除重复的对象
使用LINQ在c#中从列表中删除重复的对象
这里有一个Column
对象的列表。每个Column
对象都有一些可能是唯一的属性。下面是我目前写的一段示例代码。如何从columns
列表中移除重复项,使得最终列表中只有c1和c2?
Program.cs
var pc1 = new PartialColumn { Section = "C50" }; var pc2 = new PartialColumn { Section = "C40" }; var c1 = new Column { X = 0, Y = 0, StartElevation = 0, EndElevation = 310, FoundationHeight = 60, ListOfPartialColumns = new List{pc1} }; var c2 = new Column { X = 600, Y = 0, StartElevation = 0, EndElevation = 630, FoundationHeight = 60, ListOfPartialColumns = new List { pc1, pc2 } }; var c3 = new Column { X = 600, Y = 0, StartElevation = 0, EndElevation = 630, FoundationHeight = 60, ListOfPartialColumns = new List { pc1, pc2 } }; var columns = new List {c1, c2, c3};
PartialColumn.cs
public class PartialColumn { public string Section { get; set; } }
Column.cs
public class Column { public double StartElevation { get; set; } public double EndElevation { get; set; } public double X { get; set; } public double Y { get; set; } public ListListOfPartialColumns { get; set; } public double FoundationHeight { get; set; } }
更新:
我想从columns列表中移除重复项。正如你所看到的,c2和c3具有相同的属性。我想移除c3。
问题:如何使用LINQ在C#中从列表中删除重复的对象?
出现原因:提问者想要从列表中删除重复的对象,但是列表中的对象没有共同的属性,因此无法直接使用LINQ的Distinct方法来实现。
解决方法:为Column类添加比较器,然后使用Distinct方法来获取唯一的对象。具体代码如下:
var distinctColumns = columns .Distinct(new ColumnComparer());
如果想要删除c3这个对象,也可以重写Column类的GetHashCode和Equals方法来实现,但是这种方法可能比较麻烦。
对于更详细的代码和问题描述,请查看提问者在Stack Overflow上的其他问题(链接已提供)。