/// <summary>
        /// Combines two arrays and returns a new array containing both values
        /// </summary>
        /// <typeparam name="ArrayType">Type of the data in the array</typeparam>
        /// <param name="Array1">Array 1</param>
        /// <param name="Additions">Arrays to concat onto the first item</param>
        /// <returns>A new array containing both arrays' values</returns>
        public static ArrayType[] Concat <ArrayType>(this ArrayType[] Array1, params ArrayType[][] Additions)
        {
            Contract.Requires <ArgumentNullException>(Array1 != null, "Array1");
            Contract.Requires <ArgumentNullException>(Additions != null, "Additions");
            Contract.Requires <ArgumentNullException>(Contract.ForAll(Additions, x => x != null), "Additions");
            ArrayType[] Result = new ArrayType[Array1.Length + Additions.Sum(x => x.Length)];
            int         Offset = Array1.Length;

            Array.Copy(Array1, 0, Result, 0, Array1.Length);
            for (int x = 0; x < Additions.Length; ++x)
            {
                Array.Copy(Additions[x], 0, Result, Offset, Additions[x].Length);
                Offset += Additions[x].Length;
            }
            return(Result);
        }