public bool?TryGetValue(string enableInfo, EnableInfoVariables variables)
        {
            bool?result = null;

            try
            {
                EnableInfoData data;

                if (values.TryGetValue(enableInfo, out data))
                {
                    result = data.TryGetResult(variables);
                }
                else
                {
                    data = new EnableInfoData(enableInfo);

                    result = data.TryGetResult(variables);

                    values.Add(enableInfo, data);
                }
            }
            catch (EnableInfoException)
            {
                // Ignore any errors that occur when evaluating the enable info expression.
            }

            return(result);
        }
            internal bool?TryGetResult(EnableInfoVariables variables)
            {
                bool result;

                if (!resultCache.TryGetValue(variables, out result))
                {
                    if (expression != null)
                    {
                        result = new EnableInfoInterpreter(variables).Evaluate(expression);

                        resultCache.Add(variables, result);
                    }
                    else
                    {
                        return(null);
                    }
                }

                return(result);
            }