public static Manager CreateManagerEmployeeTree()
 {
     Random rnd = new Random(4524); // Passing in a seed guarantees the same values each time
     Manager CEO = new Manager() { FirstName = fnames[rnd.Next(fnames.Length)], LastName = lnames[rnd.Next(lnames.Length)] };
     CreateReports(5, CEO, rnd);
     return CEO;
 }
 private static void CreateReports(int depth, Manager m, Random rnd)
 {
     int count = rnd.Next(10) + 3;
     for (int i = 0; i < count; i++)
     {
         int j = rnd.Next(10);
         IEmployee e = (j > 2 && depth > 1) ? (IEmployee)new Manager() : (IEmployee)new Employee();
         e.LastName = lnames[rnd.Next(lnames.Length)];
         e.FirstName = fnames[rnd.Next(fnames.Length)];
         e.DirectManager = m;
         m.ReportsList.Add(e);
         m.ReportsDict.Add(e.FirstName + i, e);
         if (e.IsManager) CreateReports(depth - 1, (Manager)e, rnd);
     }
 }
 public static Manager CreateManagerEmployeeTree()
 {
     Random rnd = new Random(4524);
     Manager CEO = new Manager() { FirstName = fnames[rnd.Next(fnames.Length)], LastName = lnames[rnd.Next(lnames.Length)] };
     CreateReports(5, CEO, rnd);
     return CEO;
 }