C# 循环依赖,分片,聚类
1 public static List<ProjectModel> While_ProjectRef(ProjectModel projectModel,SolutionModel solutionModel, 2 List<ProjectModel> ProjectCrip) 3 { 4 List<ProjectModel> Self_Refs = new List<ProjectModel>(); 5 if(projectModel.Projectrefs.Count>0) 6 { 7 foreach(var ProjectRef in projectModel.Projectrefs) 8 { 9 //对于每一个项目引用进行分析 10 foreach (var project in solutionModel.Projects) 11 { 12 //寻找项目引用的projecta 13 if (project.Name == ProjectRef.Name) 14 { 15 //如果已经被分析过了,那么就不再分析这个子引用 16 if (ProjectCrip.Contains(project)) 17 break; 18 ProjectCrip.Add(project); 19 Self_Refs.Add(project); 20 break; 21 } 22 } 23 } 24 foreach (var Project_ref in Self_Refs) 25 { 26 var child_project_ref=While_ProjectRef(Project_ref, solutionModel, ProjectCrip); 27 ProjectCrip = ProjectCrip.Union(child_project_ref).ToList(); 28 } 29 } 30 return ProjectCrip; 31 } 32 33 34 static public void Main(string[] args) 35 { 36 SolutionModel solutionModel = new SolutionModel(); 37 ProjectModel A1 = new ProjectModel(); 38 A1.Name = A1; 39 ProjectModel A2 = new ProjectModel(); 40 A2.Name = A2; 41 ProjectModel A3 = new ProjectModel(); 42 A3.Name = A3; 43 //Model1: A1-》A2-》A3 44 //A1.Projectrefs.Add(A2); 45 //A2.Projectrefs.Add(A3); 46 //Model2: A1-》A2-》A1 47 //A1.Projectrefs.Add(A2); 48 //A2.Projectrefs.Add(A1); 49 //Model3: A1-》A2-》A3->A1 50 //A1.Projectrefs.Add(A2); 51 //A2.Projectrefs.Add(A3); 52 //A2.Projectrefs.Add(A1); 53 54 //Model4: A1-》A2-》A3->A1 55 // A1->A3->A1 56 //A1.Projectrefs.Add(A2); 57 //A2.Projectrefs.Add(A3); 58 //A3.Projectrefs.Add(A1); 59 60 //A1.Projectrefs.Add(A3); 61 //A3.Projectrefs.Add(A1); 62 //Model5: A1-》A1 63 A1.Projectrefs.Add(A1); 64 65 66 solutionModel.Projects.Add(A1); 67 solutionModel.Projects.Add(A2); 68 solutionModel.Projects.Add(A3); 69 70 List<ProjectModel> result=new List<ProjectModel> (); 71 result = While_ProjectRef(A1, solutionModel, result); 72 if(!result.Contains(A1)) 73 result.Add(A1); 74 Console.ReadKey(); 75 }