Check every item in list against every item in the same list but optimized.

Ive got a bunch of UI objects in a scene. I want that the do a check to see if they are overlapping. I have them all in a list. Im sure it is not optimized if i put a code all object to do a check on all objects in the list. It should be a code on the manager that runs through the list and checks all objects. But it almost seems to be two foreach loops needed because i need to go through all objects in the list (first loop) and check it off against every object in the list (except itself and second loop). Is there any way to do this optimized?

Here is a paper on various algorithms performance for cube intersection on large sets. Pick one, google a C# implementation and there you go.