예제 #1
0
        /// <summary>
        ///		Convierte un objeto en una variable (o lo deja tal cual si ya era una variable)
        /// </summary>
        private VariableModel ConvertToVariable(object value)
        {
            if (value is VariableModel implicitVariable)
            {
                return(implicitVariable);
            }
            else
            {
                VariableModel variable = new VariableModel(Guid.NewGuid().ToString(), GetVariableType(value));

                // Asigna el valor
                variable.Value = value;
                // y convierte el resultado
                return(variable);
            }
        }
예제 #2
0
        /// <summary>
        ///		Convierte un objeto a fecha
        /// </summary>
        private DateTime?ConvertToDate(VariableModel variable)
        {
            string value = ConvertToString(variable);

            // Interpreta la fecha como una cadena de tipo yyyy-MM-dd HH:mm:ss
            if (!string.IsNullOrWhiteSpace(value) &&
                DateTime.TryParseExact(value, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat,
                                       System.Globalization.DateTimeStyles.AssumeUniversal, out DateTime result))
            {
                return(result);
            }
            else
            {
                return(null);
            }
        }
예제 #3
0
        /// <summary>
        ///		Añade una variable
        /// </summary>
        public void Add(string name, VariableModel.VariableType type, object value)
        {
            // Normaliza el nombre
            name = Normalize(name);
            // Añade / modifica el valor
            if (Variables.ContainsKey(name))
            {
                Variables[name].Value = value;
            }
            else
            {
                VariableModel variable = new VariableModel(name, type);

                // Asigna el valor
                variable.Value = value;
                // Añade la variable a la tabla
                Variables.Add(name, variable);
            }
        }
예제 #4
0
        /// <summary>
        ///		Compara el valor de la variable con un valor
        /// </summary>
        public CompareResult Compare(object value)
        {
            VariableModel target = ConvertToVariable(value);

            if (target == null && Value == null)
            {
                return(CompareResult.Equals);
            }
            else if (target != null && Value == null)
            {
                return(CompareResult.LessThan);
            }
            else if (target == null && Value != null)
            {
                return(CompareResult.GreaterThan);
            }
            else
            {
                switch (Type)
                {
                case VariableType.Numeric:
                    return(CompareWithNumeric(ConvertToNumeric(target)));

                case VariableType.Date:
                    return(CompareWithDate(ConvertToDate(target)));

                case VariableType.Boolean:
                    return(CompareWithBoolean(ConvertToBoolean(target)));

                case VariableType.String:
                    return(CompareWithString(ConvertToString(target)));

                default:
                    throw new NotImplementedException($"Cant compare variable {Name} with type {Type} and the value {target}");
                }
            }
        }
예제 #5
0
        /// <summary>
        ///		Convierte un objeto a un tipo determinado
        /// </summary>
        private string ConvertToString(VariableModel variable)
        {
            switch (variable.Value)
            {
            case DateTime date:
                return($"{date:yyyy-MM-dd HH:mm:ss}");

            case double number:
                return(number.ToString(System.Globalization.CultureInfo.InvariantCulture));

            case decimal number:
                return(number.ToString(System.Globalization.CultureInfo.InvariantCulture));

            case int number:
                return(number.ToString(System.Globalization.CultureInfo.InvariantCulture));

            case float number:
                return(number.ToString(System.Globalization.CultureInfo.InvariantCulture));

            case bool boolean:
                if (boolean)
                {
                    return("true");
                }
                else
                {
                    return("false");
                }

            case string value:
                return(value);

            default:
                return(variable.Value.ToString());
            }
        }
예제 #6
0
 /// <summary>
 ///		Convierte un objeto a boolean
 /// </summary>
 private bool ConvertToBoolean(VariableModel variable)
 {
     return(Convert.ToBoolean(variable.Value));
 }
예제 #7
0
 /// <summary>
 ///		Convierte un objeto a numérico
 /// </summary>
 private double ConvertToNumeric(VariableModel variable)
 {
     return(Convert.ToDouble(variable.Value));
 }
예제 #8
0
 /// <summary>
 ///		Añade una variable
 /// </summary>
 public void Add(VariableModel variable)
 {
     Add(variable.Name, variable.Type, variable.Value);
 }