/// <summary>
        ///     Initializes a new instance of the <see cref="LSLListVectorExpr" /> class.
        /// </summary>
        /// <param name="x">The x component.</param>
        /// <param name="y">The y component.</param>
        /// <param name="z">The z component.</param>
        /// <exception cref="System.ArgumentException">
        ///     X is not an LSLFloat or LSLVariable.;x
        ///     or
        ///     Y is not an LSLFloat or LSLVariable.;y
        ///     or
        ///     Z is not an LSLFloat or LSLVariable.;z
        /// </exception>
        public LSLListVectorExpr(ILSLListExpr x, ILSLListExpr y, ILSLListExpr z)
        {
            var intX = x as LSLListIntegerExpr;

            if (!(x is LSLListFloatExpr || x is LSLListVariableExpr || intX != null))
            {
                throw new ArgumentException("X is not an LSLFloat or LSLVariable.", "x");
            }

            var intY = y as LSLListIntegerExpr;

            if (!(y is LSLListFloatExpr || y is LSLListVariableExpr || intY != null))
            {
                throw new ArgumentException("Y is not an LSLFloat or LSLVariable.", "y");
            }

            var intZ = z as LSLListIntegerExpr;

            if (!(z is LSLListFloatExpr || z is LSLListVariableExpr || intZ != null))
            {
                throw new ArgumentException("Z is not an LSLFloat or LSLVariable.", "z");
            }

            X = intX != null ? new LSLListFloatExpr(intX.ValueString) : x;
            Y = intY != null ? new LSLListFloatExpr(intY.ValueString) : y;
            Z = intZ != null ? new LSLListFloatExpr(intZ.ValueString) : z;
        }