/// <summary> /// Create a printable string representation of the object. /// </summary> /// <returns>String containing all property-value pairs.</returns> public override string ToString() { AbstractStructure obj = this; PropertyInfo[] properties = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); StringBuilder sb = new StringBuilder(); sb.Append($"{obj.GetType().Name}\n"); foreach (PropertyInfo p in properties) { if (p.PropertyType.IsArray) { if (p.GetValue(obj, null) == null) { continue; } foreach (object entry in (IEnumerable)p.GetValue(obj, null)) { if (entry.GetType().IsSubclassOf(typeof(AbstractStructure)) == false) { continue; } sb.Append(entry.ToString()); } } else { sb.AppendFormat("{0}: {1}\n", p.Name, p.GetValue(obj, null)); } } return(sb.ToString()); }