【发布时间】:2020-02-09 19:18:43
【问题描述】:
我正在拼命尝试删除所有具有相同值列表的项目。
代码如下:
private void Button_deleteDouble_MouseDown(object sender, EventArgs e)
{
boardGenerate.Add(new BoardInformation(146, new List<string> { "test" }));
boardGenerate.Add(new BoardInformation(545, new List<string> { "test" }));
boardGenerate = boardGenerate.DistinctBy(x => x.positionQueen).ToList();
}
通常,由于对象内的两个列表是相同的,因此 .DistinctBy() 命令应该删除两个对象之一。
但是不,我的对象列表仍然有相同列表的两个对象
.positionQueen 是包含列表的变量的名称
有人可以帮我吗?
编辑:
DistinctBy()方法来自MoreLinq。
这是我的 BoardInformation 类:
public class BoardInformation
{
public BoardInformation(int nbQueen, List<string> positionQueen)
{
this.nbQueen = nbQueen;
this.positionQueen = positionQueen;
}
public int nbQueen { get; set; }
public List<string> positionQueen { get; set; }
}
【问题讨论】:
-
我们对
BoardInformation一无所知也无济于事。请提供minimal reproducible example。但请注意List<T>不会覆盖Equals或GetHashCode。如果positionQueen是List<string>,您可能需要为DistinctBy调用提供IEqualityComparer<List<string>>。 (如果你能说出这是哪个DistinctBy方法也会有所帮助 - 是 MoreLINQ 吗?) -
我进行了编辑。我完全不明白你所说的 Equal 和 GetHashCode 是什么意思,你能解释一下吗?
-
你添加了2个东西,然后用
Distinct选择,为什么会删除? -
您有两个列表。它们具有相同的内容,但尝试打印出
boardGenerate[0].positionQueen.Equals(boardGenerate[1].positionQueen),它会打印出False,因为List<T>不会覆盖Equals- 这就是DistinctBy用来查找相等值的原因。 -
顺便说一句,我强烈建议您开始关注.NET naming conventions