Beispiel #1
0
        /// <summary>
        /// Converts the current object to a RantObject of the specified type and returns it.
        /// </summary>
        /// <param name="type">The object type to convert to.</param>
        /// <returns></returns>
		public RantObject ConvertTo(RantObjectType type)
		{
			if (Type == type) return Clone();

			switch (type)
			{
				case RantObjectType.String:
					{
						switch (Type)
						{
							case RantObjectType.Boolean:
								return new RantObject(_boolean.ToString());
							case RantObjectType.Number:
								return new RantObject(_number.ToString());
							case RantObjectType.Pattern:
								return new RantObject(_pattern.Code);
							case RantObjectType.List:
								{
									var sb = new StringBuilder();
									bool first = true;
									sb.Append("(");
									foreach (var rantObject in _list)
									{
										if (first)
										{
											first = false;
											sb.Append(", ");
										}

										sb.Append(rantObject);
									}
									sb.Append(")");
									return new RantObject(sb.ToString());
								}
						}
						break;
					}
				case RantObjectType.Number:
					{
						switch (Type)
						{
							case RantObjectType.Boolean:
								return new RantObject(_boolean ? 1 : 0);
							case RantObjectType.String:
								{
									double num;
									return double.TryParse(_string, out num) ? new RantObject(num) : No;
								}
						}
						break;
					}
				case RantObjectType.Boolean:
					{
						switch (Type)
						{
							case RantObjectType.Number:
								return new RantObject(_number != 0);
							case RantObjectType.String:
								{
									var bstr = _string.ToLower().Trim();
									switch (bstr)
									{
										case "true":
											return new RantObject(true);
										case "false":
											return new RantObject(false);
									}
									break;
								}
						}
						break;
					}
				case RantObjectType.List:
					{
						return new RantObject(new List<RantObject> { this });
					}
			}

			return No;
		}
Beispiel #2
0
 public RantObject(RantObjectType type)
 {
     Type = type;
 }
Beispiel #3
0
 public RantObject(RantObjectType type)
 {
     Type = type;
 }
Beispiel #4
0
        /// <summary>
        /// Converts the current object to a RantObject of the specified type and returns it.
        /// </summary>
        /// <param name="type">The object type to convert to.</param>
        /// <returns></returns>
        public RantObject ConvertTo(RantObjectType type)
        {
            if (Type == type)
            {
                return(Clone());
            }

            switch (type)
            {
            case RantObjectType.String:
            {
                switch (Type)
                {
                case RantObjectType.Boolean:
                    return(new RantObject(_boolean.ToString()));

                case RantObjectType.Number:
                    return(new RantObject(_number.ToString()));

                case RantObjectType.Pattern:
                    return(new RantObject(_pattern.Code));

                case RantObjectType.List:
                {
                    var  sb    = new StringBuilder();
                    bool first = true;
                    sb.Append("(");
                    foreach (var rantObject in _list)
                    {
                        if (first)
                        {
                            first = false;
                            sb.Append(", ");
                        }

                        sb.Append(rantObject);
                    }
                    sb.Append(")");
                    return(new RantObject(sb.ToString()));
                }
                }
                break;
            }

            case RantObjectType.Number:
            {
                switch (Type)
                {
                case RantObjectType.Boolean:
                    return(new RantObject(_boolean ? 1 : 0));

                case RantObjectType.String:
                {
                    double num;
                    return(double.TryParse(_string, out num) ? new RantObject(num) : No);
                }
                }
                break;
            }

            case RantObjectType.Boolean:
            {
                switch (Type)
                {
                case RantObjectType.Number:
                    return(new RantObject(_number != 0));

                case RantObjectType.String:
                {
                    var bstr = _string.ToLower().Trim();
                    switch (bstr)
                    {
                    case "true":
                        return(new RantObject(true));

                    case "false":
                        return(new RantObject(false));
                    }
                    break;
                }
                }
                break;
            }

            case RantObjectType.List:
            {
                return(new RantObject(new List <RantObject> {
                        this
                    }));
            }
            }

            return(No);
        }
Beispiel #5
0
        /// <summary>
        /// Converts the current object to a RantObject of the specified type and returns it.
        /// </summary>
        /// <param name="targetType">The object type to convert to.</param>
        /// <returns></returns>
        public RantObject ConvertTo(RantObjectType targetType)
        {
            if (Type == targetType)
            {
                return(Clone());
            }

            switch (targetType)
            {
            case RantObjectType.String:
            {
                switch (_value)
                {
                case bool b:
                    return(new RantObject(b.ToString()));

                case double d:
                    return(new RantObject(d.ToString(CultureInfo.InvariantCulture)));

                case List <RantObject> lst:
                {
                    var  sb    = new StringBuilder();
                    bool first = true;
                    sb.Append("(");
                    foreach (var rantObject in lst)
                    {
                        if (first)
                        {
                            first = false;
                            sb.Append(", ");
                        }

                        sb.Append(rantObject);
                    }
                    sb.Append(")");
                    return(new RantObject(sb.ToString()));
                }
                }
                break;
            }

            case RantObjectType.Number:
            {
                switch (_value)
                {
                case bool b:
                    return(new RantObject(b ? 1 : 0));

                case string str:
                {
                    return(Util.ParseDouble(str, out double num) ? new RantObject(num) : Null);
                }
                }
                break;
            }

            case RantObjectType.Boolean:
            {
                switch (_value)
                {
                case string s:
                {
                    switch (s)
                    {
                    case "True":
                        return(new RantObject(true));

                    case "False":
                        return(new RantObject(false));
                    }
                    break;
                }

                case double d:
                    // ReSharper disable once CompareOfFloatsByEqualityOperator
                    return(new RantObject(d != 0.0));
                }
                break;
            }

            case RantObjectType.List:
            {
                return(new RantObject(new List <RantObject> {
                        this
                    }));
            }
            }

            return(Null);
        }