private static bool AreEqual(Selector knownSingle, Selector other) { var multiOther = other as MultiSelector; if (multiOther != null) { return multiOther.Selectors.Any(a => AreEqual(knownSingle, a)); } if (knownSingle.GetType() != other.GetType()) return false; string knownStr, otherStr; using (var str = new StringWriter()) { knownSingle.Write(str); knownStr = str.ToString(); } using (var str = new StringWriter()) { other.Write(str); otherStr = str.ToString(); } return knownStr.Equals(otherStr, StringComparison.InvariantCultureIgnoreCase); }