private static bool Contains(this Variance v, ISet genericParameter, ISet genericArgument) { Contract.RequiresEnumIsDefined(v); Contract.Requires(genericParameter != null); if (genericArgument == null) return true; if (v == Variance.Covariant) return genericParameter.Supersets(genericArgument); if (v == Variance.Contravariant) return genericArgument.Supersets(genericParameter); return genericParameter == genericArgument; //TODO: consider how to resolve the invariant case }