/// <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; }
public RantObject(RantObjectType type) { Type = type; }
/// <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); }
/// <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); }