public override string ToString() { var sb = new StringBuilder(); //stringbuilder for performance sb.Append(base.ToString()); sb.Append(","); sb.Append(SliderType.ToString().Substring(0, 1)); sb.Append("|"); sb.Append(ControlPoints.Skip(1).Select(c => $"{c.XForHitobject}:{c.YForHitobject}").ToString("|")); sb.Append(","); sb.Append(SegmentCount); sb.Append(","); sb.Append(Length); //TODO check if additions should be added if (PointHitsounds.All(p => p.IsDefault())) { return(sb.ToString()); } sb.Append(","); sb.Append(PointHitsounds.Select(p => (int)p.SoundType).ToString("|")); sb.Append(","); sb.Append(PointHitsounds.Select(p => "" + (int)p.SampleSet + ":" + (int)p.AdditionSampleSet).ToString("|")); sb.Append(","); sb.Append(AdditionsForString); return(sb.ToString()); }