public MultiSet <T> ExceptWith(IEnumerable <T> other)
        {
            if (other is null)
            {
                throw new ArgumentNullException();
            }
            ThrowExceptionIfReadOnly();
            var multiset   = new MultiSet <T>(other);
            var enumerator = multiset.GetEnumerator();

            while (enumerator.MoveNext())
            {
                Remove(enumerator.Current, multiset[enumerator.Current]);
            }
            return(this);
        }
        public bool IsSupersetOf(IEnumerable <T> other)
        {
            if (other is null)
            {
                throw new ArgumentNullException();
            }
            var multiset   = new MultiSet <T>(other);
            var enumerator = multiset.GetEnumerator();

            while (enumerator.MoveNext())
            {
                if (!Contains(enumerator.Current) || multiset[enumerator.Current] > this[enumerator.Current])
                {
                    return(false);
                }
            }
            return(true);
        }