public SymbolsGenerator(string name, params Tensor[] forbiddenTensors) { CheckName(name); Name = name; var set = new HashSet <string>(); FromChildToParentIterator iterator; foreach (Tensor f in forbiddenTensors) { iterator = new FromChildToParentIterator(f); Tensor c; while ((c = iterator.Next()) != null) { if (TensorUtils.IsSymbol(c)) { set.Add(c.ToString()); } } } var usedNames = new string[set.Count]; var i = -1; foreach (var str in set) { usedNames[++i] = str; } UsedNames = usedNames.OrderBy(n => n).ToArray(); }