private static void SortOptionSets(CodeCompileUnit codeUnit) { // Attempt to order by name by copying to temp collection, removing all from real collection, then adding back ordered by the name var temp = new CodeNamespace[codeUnit.Namespaces.Count]; codeUnit.Namespaces.CopyTo(temp, 0); for (int i = 0; i < codeUnit.Namespaces.Count; i++) { codeUnit.Namespaces.RemoveAt(i); } codeUnit.Namespaces.AddRange(temp.OrderBy(n => n.Name).ToArray()); for (int i = codeUnit.Namespaces.Count - 1; i >= 0; i--) { var nameSpace = codeUnit.Namespaces[i]; // Attempt to order by name by copying to temp collection, removing all from real collection, then adding back ordered by the name var tmpType = new CodeTypeDeclaration[nameSpace.Types.Count]; nameSpace.Types.CopyTo(tmpType, 0); for (int j = nameSpace.Types.Count - 1; j >= 0; j--) { var type = nameSpace.Types[j]; nameSpace.Types.RemoveAt(j); var tmpMember = new CodeTypeMember[type.Members.Count]; type.Members.CopyTo(tmpMember, 0); for (int k = type.Members.Count - 1; k >= 0; k--) { type.Members.RemoveAt(k); } type.Members.AddRange(tmpMember.OrderBy(m => m.Name).ToArray()); } nameSpace.Types.AddRange(tmpType.OrderBy(n => n.Name).ToArray()); } }