protected static HashSet <CloudItem> GetNodesWithConnection(CloudItem cloudItem, EntityGuid id) { HashSet <CloudItem> result = new HashSet <CloudItem>(); Type thisType = cloudItem.GetType(); var fields = thisType.GetFields(BindingFlags.Instance | BindingFlags.NonPublic); foreach (var field in fields) { if (field.FieldType.Assembly.FullName.StartsWith("CloudFoundry.CloudController", StringComparison.OrdinalIgnoreCase)) { var value = field.GetValue(cloudItem); var collection = value as IEnumerable; if (collection != null) { foreach (var obj in collection) { if (ValueIsConnected(obj, id)) { result.Add(cloudItem); break; } } } else { if (ValueIsConnected(value, id)) { result.Add(cloudItem); break; } } } } foreach (var child in cloudItem.children) { foreach (var node in GetNodesWithConnection(child, id)) { result.Add(node); } } return(result); }