Question: I'm trying to use List.Contains in a List
My objects to compare come from a Service Reference in C# and their Equals method doesn't suit my needs.

I've been looking into IEquatables or on how to override my Equals method in an objet I'm "given" but I can't seem to find a solution for this.
Does some one know an efficient way to do this?

```
public void FilterNonExisting(List<ActivitiesActivity> commitActivitiesList)
    {
        // ActivitiesActivity is the object I'm given through a reference
        List<int> itemsToDelete = new List<int>();
        int commitCount = 0;

        foreach (ActivitiesActivity commitItem in commitActivitiesList)
        {
            if (this.logList.Contains(commitItem)) // this is the part that doesn't work the way I want it to                {
                itemsToDelete.Add(commitCount);
            }
            commitCount++;
        }
        itemsToDelete.Reverse();
        foreach (int item in itemsToDelete)
            commitActivitiesList.RemoveAt(item);
        if (commitActivitiesList.Count == 0)
        {
            throw new AllCommitedException("All lines had already been committed");
        }

```

Answer: 
It sounds like you just want to implement `IEqualityComparer<ActivitiesActivity>`:

```
public class ActivitiesActivityEqualityComparer
    : IEqualityComparer<ActivitiesActivity>
{
    public bool Equals(ActivitiesActivity x, ActivitiesActivity y)
    {
        ...
    }

    public int GetHashCode(ActivitiesActivity activity)
    {
        ...
    }
}

```

Then:

```
// Reuse this for multiple calls
var equalityComparer = new ActivitiesActivityEqualityComparer();
...
if (this.logList.Contains(commitItem, equalityComparer))

```

Once you've created the equality comparer, you can use that for all kinds of things, such as dictionaries with an activity as the key, LINQ operations like `Distinct` and `Join`, etc.
You could write your own `Contains` using the LINQ [`Any`](https://msdn.microsoft.com/en-us/library/vstudio/bb534972(v=vs.100).aspx) extension method:

```
if (this.logList.Any(x => YourCompareMethod(x, commitItem)))
{ }

```

The `Any` will check if any call to the lambda expression will result in `true`.

Your `YourCompareMethod` should look like:

```
private bool YourCompareMethod(CommitItem a, CommitItem b)
{
    // do your comparison
}

```