private bool IsSameType(MetadataReader referenceMetadata, MetadataReader newMetadata, TypeSpecification referenceTypeSpecification, TypeSpecification newTypeSpecification)
        {
            TypeSpecificationSignature referenceSignature = referenceMetadata.GetSignature(referenceTypeSpecification);
            TypeSpecificationSignature newSignature = newMetadata.GetSignature(newTypeSpecification);

            SignatureTypeCode referenceTypeCode = referenceSignature.TypeCode;
            SignatureTypeCode newTypeCode = newSignature.TypeCode;
            if (referenceTypeCode != newTypeCode)
                return false;

            switch (referenceTypeCode)
            {
            case SignatureTypeCode.Pointer:
                Console.WriteLine("IsSameType not yet implemented for {0}.", referenceTypeCode);
                return true;

            case SignatureTypeCode.FunctionPointer:
                Console.WriteLine("IsSameType not yet implemented for {0}.", referenceTypeCode);
                return true;

            case SignatureTypeCode.Array:
                Console.WriteLine("IsSameType not yet implemented for {0}.", referenceTypeCode);
                return true;

            case SignatureTypeCode.SZArray:
                Console.WriteLine("IsSameType not yet implemented for {0}.", referenceTypeCode);
                return true;

            case SignatureTypeCode.GenericTypeInstance:
                if (!IsSameType(referenceMetadata, newMetadata, referenceSignature.TypeHandle, newSignature.TypeHandle))
                    return false;

                ImmutableArray<TypeSignature> referenceGenericArguments = referenceSignature.GenericTypeArguments;
                ImmutableArray<TypeSignature> newGenericArguments = newSignature.GenericTypeArguments;
                if (referenceGenericArguments.Length != newGenericArguments.Length)
                    return false;

                for (int i = 0; i < referenceGenericArguments.Length; i++)
                {
                    if (!IsSameTypeSignature(referenceMetadata, newMetadata, referenceGenericArguments[i], newGenericArguments[i]))
                        return false;
                }

                return true;

            default:
                return false;
            }
        }