The way I'd do it is to use Distinct with a comparer:
public class MyClass
{
public string Name { get; set; }
public string Other { get; set; }
public MyClass(string a, string b)
{
Name = a; Other = b;
}
}
public class MyClassComp : IEqualityComparer<MyClass>
{
public bool Equals(MyClass x, MyClass y)
{
return x.Name == y.Name && x.Other == y.Other;
}
public int GetHashCode(MyClass obj)
{
if (Object.ReferenceEquals(obj, null)) return 0;
int hashName = obj.Name == null ? 0 : obj.Name.GetHashCode();
int hashOther = obj.Other == null ? 0 : obj.Other.GetHashCode();
return hashName ^ hashOther;
}
}
I can then use that to do what you want:
List<MyClass> list = new List<MyClass>();
list.Add(new MyClass("A", "A"));
list.Add(new MyClass("A", "A"));
list.Add(new MyClass("A", "B"));
list.Add(new MyClass("A", "C"));
list.Add(new MyClass("B", "A"));
list.Add(new MyClass("B", "A"));
list.Add(new MyClass("B", "B"));
list.Add(new MyClass("B", "B"));
List<MyClass> newList = list.Distinct(new MyClassComp()).ToList();