使用LINQ在c#中从列表中删除重复的对象

13 浏览
0 Comments

使用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 List ListOfPartialColumns { get; set; }
    public double FoundationHeight { get; set; }
}

更新:

我想从columns列表中移除重复项。正如你所看到的,c2和c3具有相同的属性。我想移除c3。

0
0 Comments

问题:如何使用LINQ在C#中从列表中删除重复的对象?

出现原因:提问者想要从列表中删除重复的对象,但是列表中的对象没有共同的属性,因此无法直接使用LINQ的Distinct方法来实现。

解决方法:为Column类添加比较器,然后使用Distinct方法来获取唯一的对象。具体代码如下:

var distinctColumns = columns
   .Distinct(new ColumnComparer());

如果想要删除c3这个对象,也可以重写Column类的GetHashCode和Equals方法来实现,但是这种方法可能比较麻烦。

对于更详细的代码和问题描述,请查看提问者在Stack Overflow上的其他问题(链接已提供)。

0