private void Intersect(ArrayList list1, ArrayList list2, ArrayList result) { foreach (EndpointPermission perm1 in list1) { foreach (EndpointPermission perm2 in list2) { EndpointPermission perm = perm1.Intersect(perm2); if (perm != null) { // instead of the below it's also okay to simply do: // result.Add (perm); // below is only done to avoid double entries bool replaced = false; for (int i = 0; i < result.Count; i++) { EndpointPermission res = (EndpointPermission)result [i]; EndpointPermission resperm = perm.Intersect(res); if (resperm != null) { result [i] = resperm; replaced = true; break; } } if (!replaced) { result.Add(perm); } } } } }