/// <summary>
 ///  Constructs a Flag Data operation with multiple mutations.
 /// </summary>
 /// <param name="ops">The operations to perform.</param>
 ///
 /// <exception cref="ArgumentNullException">
 ///  <paramref name="ops"/> is null.
 /// </exception>
 /// <exception cref="ArgumentException">
 ///  <paramref name="ops"/> has a length of zero.
 /// </exception>
 public FlagMultiOperation(params FlagOperation[] ops)
 {
     if (ops == null)
     {
         throw new ArgumentNullException(nameof(ops));
     }
     if (ops.Length == 0)
     {
         throw new ArgumentException(
                   $"Must pass at least one {nameof(FlagOperation)} to {nameof(FlagMultiOperation)}!", nameof(ops));
     }
     FlagOperation[] newOps = new FlagOperation[ops.Length];
     Array.Copy(ops, newOps, ops.Length);
     Operations = Array.AsReadOnly(newOps);
 }
 /// <summary>
 ///  Constructs a Flag Data operation with multiple mutations.
 /// </summary>
 /// <param name="ops">The operations to perform.</param>
 ///
 /// <exception cref="ArgumentNullException">
 ///  <paramref name="ops"/> is null.
 /// </exception>
 /// <exception cref="ArgumentException">
 ///  <paramref name="ops"/> has a length of zero.
 /// </exception>
 public FlagOperation(params FlagOperation[] ops)
 {
     if (ops == null)
     {
         throw new ArgumentNullException(nameof(ops));
     }
     if (ops.Length == 0)
     {
         throw new ArgumentException(
                   $"Must pass at least one {nameof(FlagOperation)} when using multi constructor!", nameof(ops));
     }
     FlagOperation[] newOps = new FlagOperation[ops.Length];
     Array.Copy(ops, newOps, ops.Length);
     Type       = OpType.Multi;
     Operations = Array.AsReadOnly(newOps);
 }