/// <summary>
    /// Gets a combined enum with all the specified flags set
    /// </summary>
    public static TEnum Combine <TEnum>(params TEnum[] flags) where TEnum : struct, IConvertible
    {
        if (flags.Length == 0)
        {
            throw new ArgumentOutOfRangeException();
        }
        if (flags == null)
        {
            throw new ArgumentNullException();
        }

        TEnum multiEnum = flags[0];

        for (int i = 1; i < flags.Length; i++)
        {
            multiEnum.Add(flags[i]);
        }
        return(multiEnum);
    }