private void DepthBuild(BuildTreeNode <CustomBuildTreeNodeConfig> buildNode, PropertiesTreeNode newNode) { // Создаём другие node дерева. List <PropertiesTreeNode> newNodes = new List <PropertiesTreeNode>(); foreach (var nodePair in buildNode.ChildNodes) { //string propName = nodePair.Key; //if (buildNode.Config.IgnoredProperties.Contains(propName)) // continue; var newInnerNode = new PropertiesTreeNode(nodePair.Value.Property); // Если это поле if (buildNode.Config.GoDepthProperties.Contains(newInnerNode.PropertyName)) { DifferenceSearchBuilderExtensions.AutoDepthBuild(newInnerNode.PropertyType, newInnerNode); } else { DepthBuild(nodePair.Value, newInnerNode); } newNodes.Add(newInnerNode); } newNode.InnerProperties = buildNode.Config.NeedAllProperties ? buildNode.PropertyType.GetProperties() : buildNode.Config.SelectedProperties.ToArray(); newNode.Nodes = newNodes.ToArray(); }
private void DepthBuild(BuildTreeNode <AutoBuildTreeNodeConfig> buildNode, PropertiesTreeNode newNode) { PropertyInfo[] allTypeProperties = buildNode.PropertyType.GetProperties(); // Исключаем все игнорируемые поля. PropertyInfo[] neededProperties = allTypeProperties .Where(info => !buildNode.Config.IgnoredProperties.Contains(info.Name)).ToArray(); // Создаём другие node дерева. List <PropertiesTreeNode> newNodes = new List <PropertiesTreeNode>(); foreach (var info in neededProperties) { // Если в build версии дерева есть node, тогда проходим по его правилам. if (buildNode.ChildNodes.ContainsKey(info.Name)) { if (buildNode.ChildNodes[info.Name].Config.IsDeadEnd) { continue; } var newInnerNode = new PropertiesTreeNode(info); DepthBuild(buildNode.ChildNodes[info.Name], newInnerNode); newNodes.Add(newInnerNode); } // Если в build версии дерева нету node, тогда запускаем полностью рефлексивный обход. else if (!info.PropertyType.IsSimple()) { var newInnerNode = new PropertiesTreeNode(info); DifferenceSearchBuilderExtensions.AutoDepthBuild(info.PropertyType, newInnerNode); newNodes.Add(newInnerNode); } } newNode.InnerProperties = neededProperties; newNode.Nodes = newNodes.ToArray(); }