using System.Collections.Generic;
namespace ContainsNotDoingWhatIThoughtItWould
public static class Program
public class MyEquatable : IEquatable<MyEquatable>
public MyEquatable(params string[] tags)
public bool Equals(MyEquatable other)
if (this.tags.Count() != other.tags.Count())
var commonTags = this.tags.Intersect(other.tags);
return commonTags.Count() == this.tags.Count();
public override int GetHashCode()
foreach (string element in this.tags.OrderBy(x => x))
hash = unchecked(hash * element.GetHashCode());
public static void Main(string[] args)
var a = new MyEquatable("A");
var ab = new MyEquatable("A", "B");
IEnumerable<MyEquatable> myList = new MyEquatable[]
var target = new MyEquatable("A", "B");
var isTrue1 = target.GetHashCode() == ab.GetHashCode();
var isTrue2 = target.Equals(ab);
var isFalse1 = target.GetHashCode() == a.GetHashCode();
var isFalse2 = target.Equals(a);
var whyIsThisFalse = myList.Contains(target);
Console.WriteLine(whyIsThisFalse);
var wrappedChildTarget = new List<MyEquatable> { target };
var thisIsTrue = myList.Intersect(wrappedChildTarget).Any();
Console.WriteLine(thisIsTrue);