/// <summary>
        /// 2つの集合の和集合を取る
        /// </summary>
        /// <param name="set1">集合1</param>
        /// <param name="set2">集合2</param>
        /// <returns>集合1∪集合2</returns>
        public static FiniteSet <TEnum> Union <TEnum>(this FiniteSet <TEnum> set1, FiniteSet <TEnum> set2)
            where TEnum : Enum
        {
            var retSet = new FiniteSet <TEnum>(set1);

            retSet.UnionWith(set2);
            retSet.Update();
            return(retSet);
        }
        /// <summary>
        /// 2つの集合の対称差(排他的論理和)を取る
        /// </summary>
        /// <param name="set1">集合1</param>
        /// <param name="set2">集合2</param>
        /// <returns>集合1△集合2</returns>
        public static FiniteSet <TEnum> SymmetricExcept <TEnum>(this FiniteSet <TEnum> set1, FiniteSet <TEnum> set2)
            where TEnum : Enum
        {
            var retSet = new FiniteSet <TEnum>(set1);

            retSet.SymmetricExceptWith(set2);
            retSet.Update();
            return(retSet);
        }