/// <summary>
        /// Selects an operator at random.
        /// </summary>
        /// <returns>The operator.</returns>
        /// <param name="returnType">Return type of the operator.</param>
        public static bool TrySelectOperatorAtRandom(
            Type returnType,
            out OperatorSignature signatureOut)
        {
            if (operatorList == null)
            {
                throw new InvalidOperationException("operatorList is null");
            }

            List <OperatorSignature> candidates = new List <OperatorSignature> ();

            foreach (OperatorSignature signature in operatorList)
            {
                if (signature.ReturnType == returnType)
                {
                    candidates.Add(signature);
                }
            }

            if (candidates.Count == 0)
            {
                signatureOut = null;
                return(false);
            }

            int index = CommonHelperMethods.GetRandomPositiveInt0ToValue(candidates.Count - 1);

            signatureOut = candidates [index];
            return(true);
        }
        /// <summary>
        /// Adds the operator.
        /// </summary>
        /// <param name="signature">Signature.</param>
        public static void AddOperator(string value, Type returnTypeIn, Type lhsTypeIn, Type rhsTypeIn)
        {
            OperatorSignature signature = new OperatorSignature(value, returnTypeIn, lhsTypeIn, rhsTypeIn);

            operatorList.Add(signature);
        }