using System.Collections;
using System.Collections.Generic;
public class SubAssembly : IComparable
public string Name { get; set; }
public int CompareTo(SubAssembly other) => Name.CompareTo(other.Name);
public int CompareTo(object other) => Name.CompareTo((other as SubAssembly)?.Name);
public Guid Id { get; set; }
public SortedSet<SubAssembly> SubAssemblies { get; set; } = new SortedSet<SubAssembly>();
public static void Main()
var machine = new Machine
var propertyInfo = machine.GetType().GetProperty("SubAssemblies");
var subAssemblies = propertyInfo.GetValue(machine);
Console.WriteLine("This will contain a type string: " + string.Join(",", subAssemblies));
Console.WriteLine("Here's your data: " + string.Join(",", ((SortedSet<SubAssembly>)subAssemblies).Select( x => x.Name)));
foreach (var subAssemblyObject in subAssemblies as IEnumerable)
var type = subAssemblyObject.GetType();
Console.WriteLine(string.Join(",", type.GetProperties(BindingFlags.Public | BindingFlags.Instance).Select( x => x.Name + ": " + x.GetValue(subAssemblyObject))));