如何从List <T>中删除项目?

0 c# list

我有一个项目清单.

问题是返回的项目(我无法控制)三次返回相同的项目.

因此,虽然列表中应该包含的实际内容是:

  1. 一个
  2. C

我明白了

  1. 一个
  2. C
  3. 一个
  4. C
  5. 一个
  6. C

如何清晰轻松地删除重复项?也许计算项目,除以3并删除从X到list.Count的任何内容?

Ant*_*ram 11

最快捷,最简单的方法是删除项目,而是运行不同的查询

var distinctItems = list.Distinct();
Run Code Online (Sandbox Code Playgroud)

如果您必须拥有列表,则可以随时附加.ToList()到呼叫中.如果您必须继续使用相同的列表,那么您只需要迭代它并跟踪您已有的内容并删除任何重复项.

编辑: "但我正在上课"

如果你有一个给定类的列表,要使用Distinct,你需要(a)覆盖EqualsGetHashCode在你的类中,以便进行适当的相等比较.如果您无法访问源代码(或者根本不想因为某种原因而不想覆盖这些方法),那么您可以(b)提供IEqualityComparer<YourClass>实现作为Distinct方法的参数.这也允许您指定EqualsGetHashCode实现,而无需修改实际类的源.

public class MyObjectComparer : IEqualityComparer<MyObject>
{
    public bool Equals(MyObject a, MyObject b)
    {
        // code to determine equality, usually based on one or more properties
    }

    public int GetHashCode(MyObject a)
    {
        // code to generate hash code, usually based on a property
    }
}

// ...

var distinctItems = myList.Distinct(new MyObjectComparer());
Run Code Online (Sandbox Code Playgroud)