private static int[] GetTopologicalSortOrder(List<DependentAlias> fields) { TopologicalSorter g = new TopologicalSorter(fields.Count); Dictionary<string, int> _indexes = new Dictionary<string, int>(); // add vertices for (int i = 0; i < fields.Count; i++) { _indexes[fields[i].Alias.ToLower()] = g.AddVertex(i); } // add edges for (int i = 0; i < fields.Count; i++) { if (fields[i].DependsOn != null) { for (int j = 0; j < fields[i].DependsOn.Length; j++) { var dependentField = fields[i].DependsOn[j].ToLower(); if (_indexes.ContainsKey(dependentField)) { g.AddEdge(i, _indexes[dependentField]); } } } } return g.Sort(); }