Get the two components constrained by a mate

I can get all the components in an assembly and add them to a list:

var assembly = (AssemblyDoc)swModel;

var components = (object[])assembly.GetComponents(false);

var componentList = new List();

foreach (var component in components)

{

    componentList.Add((Component2)component);

}

But I am unable to find most of the components constrained by the mates in the list:

foreach (var component in components)

{

    var swcomponent = (Component2)component ;

    var mates = (object[])swcomponent.GetMates();

    foreach (var mate in mates)

    {

        var swmate = (IMate2)mate;

        var entity1 = swmate.MateEntity(0);

        var entity2 = swmate.MateEntity(1);

        var component1 = entity1.ReferenceComponent;

        var component2 = entity2.ReferenceComponent;

         var found1 = componentList.Contains(component1);

         var found2 = componentList.Contains(component2);

    }

}

My model (attached) is quite basic: the assembly contains two subassemblies (which are in fact instances of the same assembly) mated together, with each subassembly containing two parts mated together.

How can I uniquely determine which parts in the assembly each mate constrains. I need to be able to distinguish between parts that are used in different assemblies (e.g. TwoBarHinge<1>/Bar<1> should be distinguishable from TwoBarHinge<2>/Bar<1>).

I have tried comparing names, but the names that I get out of the two components for the mate don't contain the assembly when the mate is between two parts in the same subassembly. So, for example, whilst I read full names like TwoBarHinge<1>/Bar<1> when iterating through the list of components, I only read Bar<1> from the components constrained by the mate.

Thank you.

SolidworksApi macros