从列表中筛选重复项以填充ComboBox

Ben*_*Ben 2 c# list duplicates

我一直在寻找一种方法来过滤掉列表中的重复项以填充表单,但到目前为止,我发现只需创建一个重复列表,其中包含一个Hashset或其他方法,涉及将重复项分组到单独的列表中,但是我对保持额外内容不感兴趣.

目前我在组合框中得到的是:

123
123
456
456
789
789
Run Code Online (Sandbox Code Playgroud)

等等......麻烦的是,我正在收集模型(或类)中的数据:

List<ModelName>

ModelName<1>
{
   string Name = Bob;
   int Number = 123;
}
ModelName<2>
{
   string Name = Jim;
   int Number = 123;
}
ModelName<3>
{
   string Name = Bob;
   int Number = 456;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用唯一的类填充列表:

ModelName<1>
{
    Name; 
    Number;
}
ModelName<2>
{
    Name;
}
ModelName<3>
{
    Number;
}
Run Code Online (Sandbox Code Playgroud)

并过滤掉并处理掉任何双倍的东西?

Mar*_*age 10

您可以使用LINQ Distinct运算符从集合中删除重复项:

var listWithoutDuplicates = listWithDuplicates.Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

如果要自定义元素的比较方式,则可以使用需要的重载IEqualityComparer<T>.

在您的情况下,如果要将"相等"定义为具有相同的Location属性值,则可以使用EqualityComparer:

class EqualityComparer : IEqualityComparer<ClassName> {

  public Boolean Equals(ClassName x, ClassName y) {
    return Equals(x.Location, y.Location);
  }

  public Int32 GetHashCode(ClassName obj) {
    return obj.Location.GetHashCode();
  }

}
Run Code Online (Sandbox Code Playgroud)

并按位置获取不同的项目:

var listWithoutDuplicates = listWithDuplicates.Distinct(new EqualityComparer).ToList();
Run Code Online (Sandbox Code Playgroud)

  • @ B2K:在我写完答案之后,这个问题已被编辑了很多.问题是我不理解编辑过的问题.所以我决定留下关于如何使用`IEinality`一起使用`Distinct`的答案. (2认同)